Я пытаюсь протестировать очень простой плагин jQuery, который просто вызывает метод $ .ajax и помещает его содержимое в элемент. Для тестирования я использую JsTestDriver и Sinon для насмешек.
Файл плагина выглядит так:
(function($) {
$.fn.transfer = function() {
$.ajax({
url : 'friends',
type : 'GET',
contentType : 'application/json',
dataType : 'json',
success : function(html) {
console.log("-"+html+"-");
console.log($(this));
$(this).html(html);
console.log("+"+$(this).html()+"+")
}
});
};
})(jQuery);
В теории очень простой плагин.
А потом я написал функцию успешного выполнения насмешливого теста:
TestCase("Ajax ", {
'test response' : function () {
/*:DOC divElement = <div id="container" style="height: 100px;"></div>*/
sinon.stub(jQuery, "ajax").yieldsTo(
"success", 'alex');
$(this.divElement).transfer();
console.log("*"+$(this.divElement).text()+"*");
}
});
это тоже кажется правильным. Затем, если вы выполните этот тест, через консоль будут напечатаны следующие строки:
[LOG] -alex-
[LOG] [object Object]
[LOG] +null+
[LOG] **
Таким образом, функция успеха правильно получает строку «alex». Затем печатается ссылка $ (this), сообщение устанавливается с помощью функции html (), и когда я записываю предыдущее заданное значение, возвращается ноль.
И последнее сообщение журнала находится в тестовом файле, где, как вы можете видеть, текст ajax не установлен.
Кто-нибудь знает, что я делаю неправильно? Потому что я уверен, что упускаю то, чего сейчас не вижу.