2016-09-22 9 views
1

私は支払額をチェックするスコープ関数をテストしようとしていますが、テストを実行している間に私はvalidateAmount is not a functionを取得しています。私は予告をするかを把握できなかったvalidateAmountを返すカルマテストは関数ではありません

app.js

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); 
    }); 


}); 

これはエラーです。 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(); 

OR

あなたは機能の上に定義するのではなく、次のように定義した場合、より良い

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

EDIT:依存関係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

あなたはアップデート1 –

+0

をチェックしてくださいすることができ、私はこれを試してみました方法もvar ctrlCandidate = cntrlrCandidate(); しかし、それは私の問題を解決することができませんでした。: –

+0

更新された答えで編集を参照してください –

関連する問題