当前位置: 首页 > 面试题库 >

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

阮阳曦
2023-03-14
问题内容

我正在为进行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调用的行为?


问题答案:

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

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

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



 类似资料:
  • 比如说,我的应用程序中有一个依赖于外部API的特性--我提供了一个接口,它调用我的服务器,服务器依赖于它,调用一些外部API并对客户端做出响应。如果我想为此用cucumber编写一个验收测试,我如何将对外部API的调用存根,例如,对的任何GET调用都将立即返回带有预定义头的某些预定义JSON响应,对该url的任何POST请求都将返回带有预定义状态和头的响应,等等。如果使用cucumber,如何进行

  • 我们中的两个人在不同的GIT分支中制作了一个迁移脚本。现在,我已经拉动了源开发分支,并更正了 GIT 合并问题,并将我的迁移脚本重命名为最后一个。因此,数据库的新初始化和从开发分支的版本迁移数据库将是可以的。 然而,我的本地测试数据库中有很多数据,所以我手动应用了我在GIT中引入的新迁移脚本。然而,我不能让flyway认为,一切都很好。 那么,我如何才能伪造迁移? 当我尝试迁移时,我收到以下错误:

  • 问题内容: 是否可以伪造或劫持变量的内容? 我想伪造一个请求: 我如何用PHP做到这一点?CURL可以这样做吗? 问题答案: 我认为您的意思是远程伪造。简短的答案是可以。关于它多么容易的长答案取决于您要伪造它的方式。 如果您不关心接收响应,那么它就像打开原始套接字到目标并伪造源IP地址一样简单。我不确定在PHP中是否真的容易实现,因为所有PHP的套接字实现都在TCP级别或更高级别。但我确信这是可能

  • 我正在使用带有离子/电容器的PhoneGap NFC,并试图锁定NXP NTAG213。 根据数据表(https://www.nxp.com/docs/en/data-sheet/NTAG213_215_216.pdf)我必须写入页面0x2B以设置PWD,页面0x2C用于PACK。 密码应该是1234,包应该是27。 问题是我不断得到0xA(LF)作为对这两个命令的响应,并且标签不会锁定自己。 之

  • 问题内容: 我最近在Python中开发了一个围绕某些ORM文档对象命名的类,以透明地向其中添加一些功能,而不用任何方式更改其接口。 我对此只有一个问题。假设我包裹了一些物体。呼叫将返回,因为确实是的一个实例。 有没有办法伪造Python中的对象类型以具有相同的调用返回? 问题答案: 测试对象的 类型 通常是python中的反模式。在某些情况下,测试对象的 “鸭子类型” 是有意义的,例如: 但是,即

  • 问题内容: 所有, 我正在尝试在一些古老的Java代码中进行一些单元测试(无接口,无抽象等)。 这是一个使用ServletContext的servlet(我假设它是由Tomcat设置的),并且它的数据库信息在web.xml / context.xml文件中设置。现在,我已经弄清楚了如何制作Fake ServletContext,但是代码已经 遍布整个地方(因此替换它是不可行的)。我需要找到一种方法