我想測試一個非常簡單的jQuery插件,它只需調用$ .ajax方法並將其內容放入元素中。爲了測試,我正在使用JsTestDriver和Sinon進行嘲諷。jQuery的Ajax測試不起作用
插件文件如下:
(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()函數設置消息,當我記錄先前的設置值時,返回null。 最後的日誌消息在測試文件中,因爲您可以看到未設置ajax文本。
有人知道我在做什麼錯嗎?因爲我確信我錯過了一些我現在看不到的東西。
console.log($(this));將引用ajax對象 - 而不是元素傳遞給插件 – mikevoermans 2012-03-29 18:37:35
你正在混合json dataType與字符串在測試中,很難按照你想要的 – charlietfl 2012-03-29 18:55:39