我正在为进行AJAX调用的JavaScript写一些QUnit测试。
为了隔离,我重写$.ajax以将AJAX调用的参数数组写入变量。这可以测试方法如何使用AJAX函数,但是我很难测试$.load()
$.ajax
$.load()
从位于http://api.jquery.com/load/的文档中:
当检测到成功的响应时(即,当textStatus为“成功”或“未修改”时),. load()将匹配元素的HTML内容设置为返回的数据。
因此,我尝试返回一个对象,该对象包含与成功处理程序的变量同名的对象:
//Mock ajax function $.ajax = function (param) { _mockAjaxOptions = param; var fakeAjaxSuccess = { responseText: "success", textStatus: "success", XMLHttpRequest: "success" }; return fakeAjaxSuccess; };
但是这种方法没有用。
如何复制成功的AJAX调用的行为?
在阅读了@Robusto和@Val的启发后,我发现了一种有效的方法:
//Mock ajax function $.ajax = function (param) { _mockAjaxOptions = param; //call success handler param.complete("data", "textStatus", "jqXHR"); };
我没有从任何真实的$ .ajax代码中引发事件,也没有通过触发任何事件来引发事件,而是让我的伪造ajax对象将该函数(作为参数传递给$.ajax())作为伪造函数的一部分。
$.ajax()