Я использую QUnit вместе с sinon. Как я могу заставить sinon's fakeserver ответить на прикованный ajax вызов, сделанный из того же метода?Sinonjs 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);
});
Моя проблема выше в том, что я получаю только ответ от одного из методов. Возможно ли, что этот fakeserver справляется с этим?
Обновление: Похоже, что добавление еще server.respond()
решает проблему. Но должен быть лучший способ, не так ли?
Согласно документации, это звучит как один вызов должен на работу, независимо от АЯКС подсчета вызовов:
server.respond(); Вызывает все асинхронные запросы в очереди, чтобы получить ответ.
Fiddle: http://jsfiddle.net/3qj20r5m/1/
О, я думал, что поддельные звонки выполнялись синхронно, поэтому я не использовал 'assert.async'. Есть ли способ выполнить вызовы синхронно? – filur
Просто для разработки: во всех образцах с одним вызовом ajax кажется, что вы можете дождаться ответа без остановки QUinit (например, http://www.kenpowers.net/blog/advanced-features-in-sinon/) 'Сделать утверждения, опять же, все синхронно. '"). Однако, с вложенными вызовами, как показано выше, кажется, что вы должны сделать QUnit wait. – filur
Я обновил свой пример, чтобы сделать его ближе к моему реальному коду. Звонки фактически вложены. Возможно, это проблема? – filur