[英]Testing promise angular with jasmine
I'm trying to check if a method with a promise has been called 我正在尝试检查是否已调用带有承诺的方法
Here's my controller 这是我的控制器
app.controller('StoresListController', function ($scope, StoresService) {
$scope.getStores = function () {
StoresService.getStores().then(function (data) {
$scope.stores = data.data;
});
};
$scope.getStores();
$scope.deleteStore = function (id) {
StoresService.deleteStore(id).then(function () {
$scope.getStores();
});
};
})
and my test 和我的测试
beforeEach(inject(function($rootScope, $controller, $q) {
rootScope = $rootScope;
scope = $rootScope.$new();
controller = $controller;
serviceMock = {
getStores: function(){
// mock promise
var deferred = $q.defer();
deferred.resolve({data : 'foo'});
return deferred.promise;
},
deleteStore : function(){
var deferred = $q.defer();
deferred.resolve({data : 'foo'});
return deferred.promise;
}
}
spyOn(serviceMock,'getStores').and.callThrough();
controller("StoresListController", {$scope: scope, StoresService: serviceMock});
}));
it('should call scope.getStores', function(){
scope.$digest();
expect(scope.getStores).toHaveBeenCalled()
});
it('should call scope.getStores afeter scope.deleteStore', function(){
scope.deleteStore(1)
scope.$digest();
expect(scope.getStores.call.count).toBe(2)
});
});
I got Error: Expected a spy, but got Function. 我得到了错误:期望有一个间谍,但得到了功能。 for the first it failed for the second, what i'm doing wrong?
第一次失败了,第二次我做错了什么?
This error occurs because you add the Spy to the serviceMock object instead of the StoresService. 发生此错误是因为您将间谍添加到serviceMock对象而不是StoresService。 Also you can call the callFake method on the spy to mock the service
您也可以调用间谍的callFake方法来模拟服务
// Notice that you have to inject the StoresService here
beforeEach(inject(function($rootScope, $controller, $q, StoresService) {
rootScope = $rootScope;
scope = $rootScope.$new();
controller = $controller;
serviceMock = {
getStores: function() {
// mock promise
var deferred = $q.defer();
deferred.resolve({ data: 'foo' });
return deferred.promise;
},
deleteStore: function() {
var deferred = $q.defer();
deferred.resolve ({ data: 'foo' });
return deferred.promise;
}
}
// Spy for getStores method
spyOn(StoresService, 'getStores').and.callFake(serviceMock.getStores);
// Spy for deleteStore method
spyOn(StoresService, 'deleteStore').and.callFake(serviceMock.deleteStore);
// Removed the local injection of StoresService
controller("StoresListController", { $scope: scope });
}));
it('should call scope.getStores', function() {
scope.$digest();
expect(scope.getStores).toHaveBeenCalled()
});
it('should call scope.getStores afeter scope.deleteStore', function() {
scope.deleteStore(1)
scope.$digest();
expect(scope.getStores.call.count).toBe(2)
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.