Вместо ожидания нескольких миллисекунд, жасмин имеет крючки, чтобы ждать, пока функция не вернется. На этой странице есть хороший пример, и я скопировал его здесь, чтобы показать конкретный способ тестирования обратных вызовов ajax. Просто добавьте шпион в качестве обратного вызова вашей функции и дождитесь выполнения этого обратного вызова.
it("should make a real AJAX request", function () {
var callback = jasmine.createSpy();
makeAjaxCall(callback);
waitsFor(function() {
return callback.callCount > 0;
}, "The Ajax call timed out.", 5000);
runs(function() {
expect(callback).toHaveBeenCalled();
});
});
EDIT:
Поскольку вы проверяете, что ваше приложение делает конкретный обратный вызов , вы можете просто заменить этот обратный вызов шпионом вместо того, чтобы создавать новый, как я.
Jasmine 2.0 добавил обратный вызов стиля «done», поэтому вы должны иметь возможность сделать что-то вроде: (I haven 't проверял синтаксис этого, но, надеюсь, хороший старт)
it("should make an ajax callback with jasmine 2.0", function(done)) {
// this is the object you are testing - assume it has the ajax method you want to call and the method that gets called when the ajax method is finished
var myObject
spyOn(myObject, "callback").andCallFake(function() {
done();
});
myObject.makeAjaxCall();
}