我正在尝试成功模拟一次在一次测试中多次调用的服务调用,重要的是返回不同的结果。
下面是我正在测试的代码示例:
marionette: false
然后我提供给我的单元测试:
var myArray = [];
angular.forEach(docs, function(doc) {
MyService.execute().then(function(data) {
myArray.push(data);
});
)};
所以我的想法是我可以为我的测试提供一个模拟:
$provide.service('MyService', function() {
return {
execute: jasmine.createSpy('MyService.execute')
};
});
所以这适用于单数,但是当做的比我假设只是再次调用它可能会有效,所以我尝试这样做:
it('should do something', function () {
MyService.execute.and.callFake(function() {
var deferred = $q.defer();
deferred.resolve(mock1);
return deferred.promise;
});
// expects my array to have 'mock1' data in
但是没有按预期工作它只返回mock2两次,我可以在我的测试中做it('should do something', function () {
MyService.execute.and.callFake(function() {
var deferred = $q.defer();
deferred.resolve(mock1);
return deferred.promise;
});
MyService.execute.and.callFake(function() {
var deferred = $q.defer();
deferred.resolve(mock2);
return deferred.promise;
});
// expected my array to have 'mock1, mock2' data in
吗?我环顾四周,但似乎找不到任何关于如何实现我想要的东西。