У меня есть довольно простая функция, которая возвращает jQuery.ajax() как таковое:
CLAW.controls.validateLocation = function(val, $inputEl) {
return $.ajax({
url: locationServiceUrl + 'ValidateLocation/',
data: {
'locationName': val
},
beforeSend: function() {
$inputEl.addClass('busy');
}
}).done(function(result) {
// some success clauses
}).fail(function(result) {
// some failure clauses
}).always(function() {
// some always clauses
});
}
По большей части этот новый интерфейс promises работает как сон и устраняет пирамиды обратного вызова при использовании jQuery.ajax() отлично. Тем не менее, я не могу для жизни понять, как правильно тестировать эти promises с помощью Jasmine и/или Sinon:
-
Вся документация Sinon предполагает, что вы используете старую школу обратные вызовы; Я не вижу ни одного примера того, как использовать его с promises/deferreds
-
При попытке использовать шпионаж Jasmine или Sinon для шпионажа на $.ajax, шпион эффективно переписывает обещание, поэтому его
done
,fail
, иalways
больше не существует в функции ajax, поэтому обещание никогда не решает и вместо этого бросает ошибку
Мне бы очень понравился пример или два из того, как проверить эти новые jQuery.ajax() promises с вышеупомянутыми тестовыми библиотеками. Я довольно сильно искал "сеть" и на самом деле ничего не сделал. Один ресурс, который я нашел, упоминается с помощью Jasmine.ajax, но я хотел бы избежать этого, если это возможно, потому что Sinon предоставляет большинство тех же возможностей из коробки.