現在、単体テストを作成するために Jasmine と Karma(Testacular) および Web Storm を使用しています。コントローラーが初期化されるとすぐに呼び出されるメソッドをスパイするのに問題があります。コントローラーの初期化時に呼び出されるメソッドをスパイすることは可能ですか?
私のコントローラーコード、私がスパイしようとしているメソッドはgetServicesNodeList()
.
myApp.controller('TreeViewController', function ($scope, $rootScope ,$document, DataServices) {
$scope.treeCollection = DataServices.getServicesNodeList();
$rootScope.viewportHeight = ($document.height() - 100) + 'px';
});
そして、ここにテスト仕様があります:
describe("DataServices Controllers - ", function () {
beforeEach(angular.mock.module('myApp'));
describe("DataServicesTreeview Controller - ", function () {
beforeEach(inject(function ($controller, $rootScope, $document, $httpBackend, DataServices) {
scope = $rootScope.$new(),
doc = $document,
rootScope = $rootScope;
dataServices = DataServices;
$httpBackend.when('GET', '/scripts/internal/servicedata/services.json').respond(...);
var controller = $controller('TreeViewController', {$scope: scope, $rootScope: rootScope, $document: doc, DataServices: dataServices });
$httpBackend.flush();
}));
afterEach(inject(function($httpBackend){
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
}));
it('should ensure DataServices.getServicesNodeList() was called', inject(function ($httpBackend, DataServices) {
spyOn(DataServices, "getServicesNodeList").andCallThrough();
$httpBackend.flush();
expect(DataServices.getServicesNodeList).toHaveBeenCalled();
}));
});
});
メソッドが呼び出されていないと言って、テストは失敗しています。をモックして、DataServices
それをテスト コントローラーに渡す必要があることはわかっています。しかし、それがモックであるかどうかにかかわらず、そのメソッドをスパイするとき、私はまだ同じ問題を抱えているようです. 誰でもアイデアを持っているか、これを処理する正しい方法に関するリソースを教えてもらえますか?