0
我想,以检查是否有一个承诺的方法被称为测试答应角茉莉花
这里是我的控制器
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();
});
};
})
和我的测试
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)
});
});
我有错误:期待一个间谍,但得到功能。第一次失败的第二次,我做错了什么?
请注意,您的初始'$从控制器scope.getStores'不返回一个承诺(因为你不使用'return'声明),因此它不是真的可用。 – floribon