如何提供返回多次调用的不同模拟响应的服务

时间:2016-11-10 14:49:02

标签: angularjs unit-testing mocking karma-jasmine

我正在尝试成功模拟一次在一次测试中多次调用的服务调用,重要的是返回不同的结果。

下面是我正在测试的代码示例:

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 吗?我环顾四周,但似乎找不到任何关于如何实现我想要的东西。

0 个答案:

没有答案