2016-09-22 3 views
1

범위를 테스트하려고하는데, 금액을 확인하지만, 테스트를 실행하는 동안 validateAmount is not a function이 표시됩니다.validateAmount를 반환하는 카르마 테스트가 함수가 아닙니다.

var ManagmentApp = angular.module("ManagemntApp", ['ngRoute', 'angularModalService', 'ng-fusioncharts']); 
ManagmentApp.config(['$routeProvider', function ($routeProvider){ 
    $routeProvider.when('/', { 
     templateUrl: 'templates/CandidateForm.html', 
     controller: 'cntrlrCandidate' 
    }).when('/CandidateList',{ 
      templateUrl: 'templates/CandidateList.html', 
      controller: 'cntrlrCandidateList' 
    }).when('/CandidatesProfile', { 
     templateUrl: 'templates/CandidateProfiles.html', 
     controller: 'cntrlrCandidateProfile' 
    }).when('/HostelStatistics', { 
     templateUrl: 'templates/HostelStatistics.html', 
     controller: 'cntrlHostelStatistics' 
    }).when('/:id', { 
     templateUrl: 'templates/CandidateForm.html', 
     controller: 'cntrlrCandidate' 
    }); 

}]); 

cntrlrCandidate.js에게

ManagmentApp.controller("cntrlrCandidate", ["$scope", "$routeParams", "HostelManagementService", "$filter","HostelManagementIndexDBService", function ($scope, $routeParams, HostelManagementService, $filter,HostelManagementIndexDBService) { 

    $scope.validateAmount = function() { 
    var vrAmount = $scope.Candidate.Amount; 
    var vrTotalAmount = $scope.PerMonthCharge; 
    if (+vrAmount < +vrTotalAmount) { 
     $scope.IsValidAmount = false; 
     $scope.Candidate.DueAmount = (+vrTotalAmount - +vrAmount); 

    } else { 

     $scope.IsValidAmount = true; 
     $scope.Candidate.DueAmount = 0;    
    } 
} 


}]); 

test.js

describe("ManagemntApp ", function() { 

beforeEach(module('ManagemntApp')); 
var scope; 
var cntrlrCandidate, 
$location; 

beforeEach(inject(function ($controller,$rootScope){ 
    scope = $rootScope.$new(); 
    cntrlrCandidate = function() { 
      return $controller('cntrlrCandidate', { 
       '$scope': scope 
      }); 
     };; 
})); 


    it('test amount', function() { 

    scope.Candidate={}; 
    scope.Candidate.Amount=2000; 
    scope.validateAmount(); 
     expect(scope.IsValidAmount).toEqual(true); 
    }); 


}); 

내가 통지를 만드는 것을 알아낼 수를 app.js.

이것은 내가 얻는 오류입니다. TestError

갱신 1 : 나는이 오류 메시지처럼 쓴

은 다음과 같습니다.

beforeEach(inject(function ($controller,$rootScope){ 
    scope = $rootScope.$new(); 
// cntrlrCandidate = function() { 
      cntrlrCandidate= $controller('cntrlrCandidate', { 
       '$scope': scope 
      }); 
     // };; 
})); 

이 오류를 확인하십시오 : enter image description here

업데이트 2 : 나는 아무 잘못했다면 나는이 방법을 시도

이 날 수정하시기 바랍니다.

describe("ManagemntApp ", function() { 
var HostelManagementIndexDBService,HostelManagementService; 
beforeEach(module('ManagemntApp')); 
var scope; 
var cntrlrCandidate, 
$location; 

beforeEach(inject(function ($controller,$rootScope){ 
    scope = $rootScope.$new(); 
// cntrlrCandidate = function() { 
    HostelManagementService = {}; 
    HostelManagementIndexDBService = {}; 
    module(function($provide) { 
    $provide.value('HostelManagementService', HostelManagementService); 
    $provide.value('HostelManagementIndexDBService', HostelManagementIndexDBService); 
    }); 

    cntrlrCandidate= $controller('cntrlrCandidate', { 
       '$scope': scope 
      }); 
     // };; 
})); 


    it('return will pass the Amount', function() { 

    scope.Candidate={}; 
    scope.Candidate.Amount=2000; 
    scope.validateAmount(); 
     expect(scope.IsValidAmount).toEqual(true); 
    }); 


}); 
+0

http://stackoverflow.com/questions/25002520/testing-an-angularjs-factory-with-karma-jasmine –

답변

0
cntrlrCandidate = function() { 
      return $controller('cntrlrCandidate', { 
       '$scope': scope 
      }); 
     }; 

당신은 기능 cntrlrCandidate를 정의하지만, 어디서든 호출하지 않았습니다.

먼저 전화를 걸어 컨트롤러를 가져와야합니다.

cntrlrCandidate 수련 후이 줄을 추가하십시오.

var ctrlCandidate =cntrlrCandidate(); 

또는

이 기능 위에 정의하는 대신 다음과 같이 정의 할 경우 더 나은

.

cntrlrCandidate = $controller('cntrlrCandidate', {'$scope': scope}); 

편집 : 종속성 HostelManagementService 당신이하지 provided.So는, 당신이 그것을 조롱 할 필요가 HostelManagementIndexDBService 다음과 같은 필수

컨트롤러.

다음 스크립트를 추가하십시오.

var HostelManagementIndexDBService,HostelManagementService; //declare at top 

// add in beforeEach 
HostelManagementIndexDBService = {}; 
HostelManagementIndexDBService = {}; 
module(function($provide) { 
    $provide.value('HostelManagementService', HostelManagementService); 
    $provide.value('HostelManagementIndexDBService', HostelManagementIndexDBService); 
}); 

UPDATE :

describe("ManagemntApp ", function() { 
    var HostelManagementIndexDBService, HostelManagementService; 
    beforeEach(module('ManagemntApp')); 
    var scope; 
    var cntrlrCandidate, 
     $location; 

    beforeEach(function() { 

     HostelManagementService = {}; 
     HostelManagementIndexDBService = {}; 


     module(function($provide) { 
      $provide.value('HostelManagementService', HostelManagementService); 
      $provide.value('HostelManagementIndexDBService', HostelManagementIndexDBService); 
     }); 

     inject(function($controller, $rootScope) { 

      scope = $rootScope.$new(); 
      cntrlrCandidate = $controller('cntrlrCandidate', { '$scope': scope }); 
     }) 
    }); 


    it('return will pass the Amount', function() { 

     scope.Candidate = {}; 
     scope.Candidate.Amount = 2000; 
     scope.validateAmount(); 
     expect(scope.IsValidAmount).toEqual(true); 
    }); 


}); 
+0

당신이 –

+0

갱신 1 확인하시기 바랍니다 수 있습니까 노력이 방법은 또한 var ctrlCandidate = cntrlrCandidate(); 하지만 그건 내 문제를 해결할 수 없습니다.:-( –

+0

EDIT with updated update –

관련 문제