![](/img/trans.png)
[英]Jasmine angularjs - spying on angular-local-storage methods called when controller is initialized
[英]Jasmine angularjs - spying on a method that is called when controller is initialized
我目前正在使用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
並將其傳遞給測試控制器。 但似乎我在監視該方法時仍會遇到同樣的問題,無論是否是模擬。 任何人有任何想法或可以指出我正確處理這個問題的資源?
編寫單元測試時,應該隔離每段代碼。 在這種情況下,您需要隔離您的服務並單獨測試它。 創建服務的模擬並將其傳遞給您的控制器。
var mockDataServices = {
getServicesNodeList: function () {
return <insert your sample data here > ;
}
};
beforeEach(inject(function ($controller, $rootScope, $document) {
scope = $rootScope.$new(),
doc = $document,
rootScope = $rootScope;
var controller = $controller('TreeViewController', {
$scope: scope,
$rootScope: rootScope,
$document: doc,
DataServices: mockDataServices
});
}));
如果是您的服務正在發出$ http請求,您可以從單元控制器測試中刪除該部分。 編寫另一個單元測試,測試服務在初始化時正在進行正確的http調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.