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