Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中的捕获请求负载_Javascript_Http_Xmlhttprequest_Google Chrome Devtools_Qunit - Fatal编程技术网

Javascript中的捕获请求负载

Javascript中的捕获请求负载,javascript,http,xmlhttprequest,google-chrome-devtools,qunit,Javascript,Http,Xmlhttprequest,Google Chrome Devtools,Qunit,我正在测试的web应用程序正在进行http调用。我正在尝试设置一个Qunit测试来验证这些调用。我需要能够验证HTTP POST调用的请求负载中的数据。我已经可以自己捕获调用,但是我没有访问该调用的请求负载的权限 以下是我目前掌握的情况: XMLHttpRequest.prototype._originalOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function(method, url, asyn

我正在测试的web应用程序正在进行http调用。我正在尝试设置一个Qunit测试来验证这些调用。我需要能够验证HTTP POST调用的请求负载中的数据。我已经可以自己捕获调用,但是我没有访问该调用的请求负载的权限

以下是我目前掌握的情况:

XMLHttpRequest.prototype._originalOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
    if(url.match(/get/)) {
        QUnit.asyncTest("Validate URL", function( assert ) {
            assert.equal( url.match(my_regex)[0] , expected_url, "Matches");
            // assert.equal( /*Validate Request Payload*/);
            start();
        });
    }
    this._originalOpen(method, url, async, user, password);
}
有没有办法在Javascript中捕获调用的请求负载?

您需要像打开一样克隆send()方法,然后检查参数:

var clone = window.XMLHttpRequest.prototype.send;
window.XMLHttpRequest.prototype.send = function() {
  // console.log(arguments);
  // Continue the send
  clone.apply(this, arguments);
};

虽然我对您自己做这件事的努力表示赞赏,但为什么不使用像or这样的工具呢?我实际上并不拥有我正在测试的应用程序。我可以在测试中使用这些工具而不修改原始应用程序吗?是的。您在测试文件中设置了所有内容。Mockjax工具仅用于jQuery ajax调用,但Sinon将在模拟核心
XMLHttpRequest
对象时使用任何代码库。您可以轻松地分析/验证请求对象的内容。看一看例子