Настоящей проблемой здесь не является необходимость вызова методов start () и stop () - фактически вы можете столкнуться с проблемами при использовании этого подхода, если не будете осторожны при повторном вызове stop () в конце вашего обратного вызова. если у вас есть дополнительные методы .ajax (). Это означает, что вы попадаете в замешательство, связанное с необходимостью следить за тем, были ли запущены все обратные вызовы, чтобы узнать, нужно ли вам снова вызывать stop () снова.
Корень проблемы заключается в поведении асинхронных запросов по умолчанию - и простое решение состоит в том, чтобы сделать запрос .ajax () синхронным, установив для свойства async значение false:
test("synchronous test", function() {
$.ajax({
url:'Sample.asmx/Service',
async:false,
success: function(d,s,x) { ok(true, "Called synchronously"); }
});
});
Тем не менее, лучший подход - разрешить асинхронное поведение и использовать правильный вызов метода теста: asyncTest () . Согласно документации " Асинхронные тесты ставятся в очередь и запускаются один за другим. Эквивалентно вызову обычного теста () и немедленному вызову stop (). "
asyncTest("a test", function() {
$.ajax({
url: 'Sample.asmx/Service',
success: function(d,s,x) {
ok(true, "asynchronous PASS!");
start();
}
});
});