Използвам jQuery $.when за обработка на обратни извиквания на ajax и използвам mockjax за симулиране на различни отговори в моите модулни тестове. Един от отговорите връща грешка в състоянието от 500. Моето обратно извикване при неуспех извежда грешка и в Q-Unit се опитвам да хвана тази грешка с помощта на „повишения“, но всичко, което получавам, е действителната грешка.
Ето кода:
var bar = new Object();
// ajax call, returns a promise object
bar.ajaxCall = function () {
return $.ajax({
url: "foo/foo"
, dataType: "json"
, data: { "blah": "blee" }
});
}
// function I'm testing ...
bar.handleAjax = function () {
return $.when(ajaxCall.call(this))
.done(function(data) { /* Success callback */ })
.fail( throw "Error!!"; });
}
Единичен тест:
// Mock ajax call in the unit test
var mock = $.mockjax({
url: "foo/foo"
, contentType: "json"
, status: 500
});
// unit test for "load"
loadTest = function () {
test("testing load failure", function () {
stop(); // stop the test so QUnit knows to wait for the ajax response
raises(function () {
var promise = bar.handleAjax();
}, "We expect an error to be thrown");
setTimeout(function() {
start();
}, 500);
});
}
Как мога да пренапиша теста, за да съм сигурен, че handleAjax хвърля грешка в подходящия момент?