Jasmine-Jquery - 为spyOn的不同调用返回不同的异步内容

时间:2016-05-02 15:01:18

标签: javascript jasmine jasmine-jquery

我尝试在sypOn中的多个Jasmine 1.4.1来电中返回不同的值。我根据答案here得到以下代码:

beforeEach(function (done) {
    loadFixtures('fixture.html');
    spyOn(dynamicContent, 'get').and.returnValues($ver1.getHtml(done),      
                                                  $ver2.getHtml(done));        
});

修改

我意识到以上是适用于Jasmine 2.4及以上版本。

我还尝试了旧版本的其他答案,但我遇到了同样的问题。

 var alreadyCalled = false;
    spyOn(dynamicContent, "get").and.callFake(function() {
       if (alreadyCalled) return $ver1.getHtml(done);
       alreadyCalled = true;
       return $ver2.getHtml(done);    
  });

我应该指出我正在使用jasmine-jquery

我的getHtml函数看起来像这样,并且在测试时是相同的:

 function getHtml(done) {

    var deferred = $.Deferred();     
    $.get('some.html').then(function (data) {
        // will only make it this far for the first call to getHtml()
        deferred.resolve(data);          
        done();
    });
    return deferred.promise();
}

问题是只有第一次调用spyOn才能成功。

我想知道这是否是由于我将done传递给函数并在getHtml()中解析它的方式

如何确保在后续调用间谍时返回两个async调用?

0 个答案:

没有答案