Ответ 1
Вместо ожидания некоторого количества миллисекунд, жасмин имеет крючки, чтобы ждать, пока функция не вернется. На этой странице есть хороший пример, и я скопировал его здесь, чтобы показать конкретный способ тестирования обратных вызовов 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", поэтому вы должны иметь возможность сделать что-то вроде: (я не тестировал синтаксис этого, но, надеюсь, хороший старт)
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();
}