gpt4 book ai didi

javascript - 用Jasmine在JS中测试AJAX调用时,.andReturn(...) 和.respondWith(...) 有什么区别?

转载 作者:行者123 更新时间:2023-11-30 00:09:44 25 4
gpt4 key购买 nike

当使用 jasmine-ajax 库测试 JavaScript 代码时,我可以模拟 ajax 响应。特别是,我可以定义将给予特定 ajax 请求的响应。似乎有(至少)两种不同的方法可以做到这一点:

方法一:

jasmine.Ajax.requests.mostRecent().respondWith({
status: 200,
contentType: 'text/plain',
responseText: 'my response'
});

方法 #2:

jasmine.Ajax.stubRequest('my/url').andReturn({
'responseText': 'my response'
});

如果我的mostRecent 请求是到url my/url,那么这两者之间还有什么区别?

我在 M.E. TroSTLer 的“JavaScript 单元测试”视频系列中介绍了这两种方法,但我无法在这些视频、StackOverflow 搜索或 Jasmine 中找到我的问题的明确答案其 ajax.js 插件的在线文档。

最佳答案

在我自己进一步挖掘之后,我相信这两个命令之间的区别至少部分在于模拟 ajax 调用的响应时间。简而言之:

  • respondWith 现在发送对过去未应答的 ajax 调用的响应,
  • andReturn 建立响应,以便在发送 future 的 ajax 调用时立即发送。

在以下 2 个示例中,验证 onreadystatechange 处理程序中的回调显示是否已返回对 ajax 调用的响应,因为这样的响应将触发回调。在方法 #1 中,发送了 ajax 调用但在调用 respondWith 之前一直没有得到答复。在方法 #2 中,响应是预先设置的,以便在发送 ajax 调用后立即返回响应。

方法一:

setUpAndSendAjaxCall1();
expect(onreadystatechangeCallback1).not.toHaveBeenCalled();
jasmine.Ajax.requests.mostRecent().respondWith({
...
"responseText": "response #1"
});
expect(onreadystatechangeCallback1).toHaveBeenCalledWith("response #1");

方法 #2:

jasmine.Ajax.stubRequest(myUrl).andReturn({
...
"responseTest": "response #2"
});
setUpAndSendAjaxCall2();
expect(onreadystatechangeCallback2).toHaveBeenCalledWith("response #2");

关于javascript - 用Jasmine在JS中测试AJAX调用时,.andReturn(...) 和.respondWith(...) 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36992557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com