如何使用 Jasmine BDD 创建 ajax 函数的存根
-
29-10-2019 - |
题
我正在努力寻找有关如何使用 Jasmine BDD 伪造 ajax 调用的任何示例?
我有一个自定义的 ajax 函数,其工作原理如下......
ajax({
url: 'JSON.php',
dataType: 'json',
onSuccess: function(resp) {
console.log(resp);
}
});
...而且我不知道如何创建一个存根来伪造调用实际的 ajax 函数。
我想避免调用 ajax 函数,因为如果对服务器的真正 ajax 调用需要一些时间来响应,并且我的测试套件中有大量规格,那么它可能会减慢我的测试套件的速度。
我听说你可以使用 spyOn(namespace, 'ajax')
但这立刻就很烦人,因为它需要我包裹我的 ajax
对象中的函数只是为了使用 spyOn
函数(但无论如何我无法理解,因为我找不到任何具体的例子来伪造 ajax 调用)。
我还听说你可以使用 createSpy()
但同样,文档也不是很有帮助(GitHub 上相应的 wiki 也不是)。
任何解释如何使用间谍创建虚假 ajax 调用的帮助将不胜感激!
解决方案
您可以使用SinonJS模拟框架,该框架在伪造服务器中具有构建。您可以轻松地将其与茉莉花一起使用: 通用标签
顺便说一句。如果您的ajax函数位于全局名称空间中,为什么不调用spyOn(window, 'ajax')
其他提示
如果您可以不使用间谍,而是使用附加组件 茉莉花ajax. 。模拟单个规范的使用 withMock
:
it("allows use in a single spec", function() {
var onSuccess = jasmine.createSpy('success');
jasmine.Ajax.withMock(function() {
ajax({
url: 'JSON.php',
dataType: 'json',
onSuccess: onSuccess
});
expect(onSuccess).not.toHaveBeenCalled();
jasmine.Ajax.requests.mostRecent().respondWith({
"status": 200,
"responseText": '{"some": "json"}'
});
expect(onSuccess).toHaveBeenCalledWith('{"some": "json"}');
});
});
仅当您使用时才会发送响应 respondWith
. 。上面的链接有一些如何安装的说明
不隶属于 StackOverflow