【问题标题】:Sinon isn't calling the .done of Jquery.ajaxSinon 没有调用 Jquery.ajax 的 .done
【发布时间】:2015-10-10 20:35:04
【问题描述】:

我用过Qunit和Sinon,

self.urlRegex = /^(.*?)\/xxx\/xxxx\/xxxxx$/;
self.server = sinon.fakeServer.create();
self.server.respondWith(self.urlRegex, [200, {"Content-Type":"application/json"}, JSON.stringify(list)]);
sinon.spy(jQuery, "ajax");
$.ajax( {
    type : "GET", 
    url : "/xxx/xxxx/xxxxx", 
    dataType : "json"
})
.done(function (data) {
    self.names = data.data;
});

self.server.respond();
self.server.restore();
jQuery.ajax.restore();

现在,如果我尝试获取名称值,它将返回 undefined 而不是 list.data,看起来完成的部分没有发生。

有什么方法可以获取值并在名称中设置?

【问题讨论】:

  • 你如何/在哪里尝试调用它? Ajax 是异步的,对吧?!
  • @A.Wolff self.server.respond();
  • 我不知道sinon,但是ajax默认是异步的,所以你在ajax请求完成之前调用self.server.respond();
  • @A.Wolff Sinon 是一个模拟 ajax 调用的间谍代理。 sinon 中的 repond() 使所有排队的异步请求都收到响应。

标签: jquery ajax gruntjs qunit sinon


【解决方案1】:

问题出在 URL 上。它添加了一些特殊的字符,因此调用了 .fail() 而不是 .done()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2011-07-06
    • 1970-01-01
    • 2017-09-24
    • 2012-02-09
    • 1970-01-01
    相关资源
    最近更新 更多