gpt4 book ai didi

javascript - Sinonjs fakeserver - 多个ajax调用

转载 作者:行者123 更新时间:2023-11-30 08:01:02 24 4
gpt4 key购买 nike

我将 QUnit 与 sinon 一起使用。我怎样才能制作 sinon 的 fakeserver响应由相同方法调用的链式 ajax?

module('demo', {
beforeEach: function(){
this.server = sinon.fakeServer.create();
},
afterEach: function(){
this.server.restore();
}
});

test('chained ajax calls', function(assert){

this.server.respondWith('GET', '/foo', [200,
{ 'Content-Type': 'application/json' }, '{ "foo": 1 }' ]);

this.server.respondWith('GET', '/bar', [200,
{ 'Content-Type': 'application/json' }, '{ "bar": 1 }' ]);

var successCount = 0;

$.get('/foo', function(data){
successCount++;
$.get('/bar', function(){
console.log('bar success');
successCount++;
});
});

this.server.respond();
assert.strictEqual(successCount, 2);
});

我上面的问题是我只从其中一种方法得到响应。假服务器能处理这个吗?

更新: 似乎添加另一个 server.respond() 可以解决问题。但一定有更好的方法,对吧?

根据文档,无论 ajax 调用次数如何,听起来都应该对作业进行一次调用:

server.respond(); Causes all queued asynchronous requests to receive a response.

fiddle :http://jsfiddle.net/3qj20r5m/1/

最佳答案

嗯,我认为 server.repond() 也应该这样做。无论如何,我通常将我的假服务器设置为自动响应。除非您需要在响应之前检查请求,否则这似乎更容易:

var server;
QUnit.module('fake server tests', {
beforeEach: function() {
server = sinon.fakeServer.create();

// *** it's this option I'm referring to...
server.autoRespond = true;

server.respondWith('GET', '/foo', [200, {
'Content-Type': 'application/json',
'{ "foo": 1 }'
}]);

server.respondWith('GET', '/bar', [200, {
'Content-Type': 'application/json',
'{ "bar": 1 }'
}]);
},
afterEach: function() {
server.restore();
}
});

QUnit.test('do some ajax', function(assert) {
var done = assert.async();

doTwoAjaxCalls(function () {

// whatever your assertions are...
// (of course, your method would need to perform the callback...)

done();
});
});

更新

查看更新后的代码,我们可以了解为什么需要调用 respond() 两次:第一次调用响应“释放”初始 ajax 请求(到 /foo) 从它的队列中,然后调用第一个成功回调。在该回调中,您启动第二个 ajax 调用,Sinon 然后保持该调用,直到您再次调用 respond()

换句话说,调用 respond() 将使 Sinon 释放所有当前持有的 ajax 请求,但在您的情况下,一次只持有一个。使用我上面提到的 autoRespond 选项消除了这种需要,因为 Sinon 立即“响应”,但我相信在这种情况下您需要使测试异步(或者至少,这是最佳实践)。

祝你好运!

关于javascript - Sinonjs fakeserver - 多个ajax调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28304459/

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