小编典典

如何伪造jquery.ajax()响应?

ajax

我正在为进行AJAX调用的JavaScript写一些QUnit测试。

为了隔离,我重写$.ajax以将AJAX调用的参数数组写入变量。这可以测试方法如何使用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调用的行为?


阅读 389

收藏
2020-07-26

共1个答案

小编典典

在阅读了@Robusto和@Val的启发后,我发现了一种有效的方法:

//Mock ajax function
$.ajax = function (param) {
    _mockAjaxOptions = param;
    //call success handler
    param.complete("data", "textStatus", "jqXHR");
};

我没有从任何真实的$
.ajax代码中引发事件,也没有通过触发任何事件来引发事件,而是让我的伪造ajax对象将该函数(作为参数传递给$.ajax())作为伪造函数的一部分。

2020-07-26