我正在为进行 AJAX 调用的 JavaScript 编写一些 QUnit 测试。
为了隔离,我覆盖了 $.ajax
以将 AJAX 调用的参数数组写入变量。这可以测试方法如何使用 AJAX 函数,但我很难测试 $.load()
的成功处理程序
来自 http://api.jquery.com/load/ 处的文档:
When a successful response is detected (i.e. when textStatus is "success" or "notmodified"), .load() sets the HTML contents of the matched element to the returned data.
所以我试图返回一个对象,其中包含与成功处理程序的变量同名的对象:
//Mock ajax function
$.ajax = function (param) {
_mockAjaxOptions = param;
var fakeAjaxSuccess = { responseText: "success", textStatus: "success", XMLHttpRequest: "success" };
return fakeAjaxSuccess;
};
但是这种方法并没有奏效。
如何复制成功的 AJAX 调用的行为?
最佳答案
这个问题已经有几年了,对于新版本的 jQuery 已经发生了一些变化。
要用 Jasmin 做到这一点,你可以尝试 Michael Falaga's approach
解决方案
function ajax_response(response) {
var deferred = $.Deferred().resolve(response);
return deferred.promise;
}
与 Jasmine
describe("Test test", function() {
beforeEach(function() {
spyOn($, 'ajax').and.returnValue(
ajax_response([1, 2, 3])
);
});
it("is it [1, 2, 3]", function() {
var response;
$.ajax('GET', 'some/url/i/fancy').done(function(data) {
response = data;
});
expect(response).toEqual([1, 2, 3]);
});
});
没有 Jasmine
$.ajax = ajax_response([1, 2, 3]);
$.ajax('GET', 'some/url/i/fancy').done(function(data) {
console.log(data); // [1, 2, 3]
});
关于javascript - 如何伪造 jquery.ajax() 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5272698/