gpt4 book ai didi

javascript - Sinon.js、QUnit 和 Jquery。尝试通过 FakeXMLHttpRequest 验证发布的数据

转载 作者:行者123 更新时间:2023-11-29 21:59:52 25 4
gpt4 key购买 nike

我有以下 QUnit 测试用例,它试图验证通过 JQuery ajax 请求发送的发布数据:

test("ajax tests", function () {
var xhr = sinon.useFakeXMLHttpRequest();
var requests = sinon.requests = [];

xhr.onCreate = function (request) {
requests.push(request);
};

var callback = sinon.spy();
var mockData = {mockData: "dummy content"}

$.ajax('/some/article', { success: callback, data: mockData, method: 'post' });

equal(sinon.requests.length, 1);
equal(sinon.requests[0].url, "/some/article");
equal(JSON.parse(sinon.requests[0].requestBody).mockData, mockData)

});

JSON.parse 失败,因为请求正文的格式为:mockdata=dummy+content

由于数据的编码方式(空格替换为 + 符号),使得解码内容以及随后使其成为 JSON 解析变得非常困难。

最终目标是使用伪造的 XHR 对象动态验证请求数据。我更喜欢这个而不是模拟 jQuery post 或 ajax 方法。因为如果我在发送 AJAX 请求的实现之间切换,我不希望我的单元测试失败。

有没有人对此有任何好运?

引用资料:

上面代码的演示:http://jsfiddle.net/ZGrTK/66/

一篇展示了我试图实现的目标的文章:http://philfreo.com/blog/how-to-unit-test-ajax-requests-with-qunit-and-sinon-js/

(代码无法为我工作。我怀疑是处理 backbone.js 的东西。不过我没有使用该框架的经验。)

最佳答案

对您的测试的几点评论:

  • jQuery ajax() 文档说,如果 data 参数不是字符串,它将使用 $.param( )。您可以通过传递一个字符串来避免这种转换。
  • 最后一个断言将 [Object].mockData 与名为 mockData 的变量进行比较。我猜那只是一个打字错误。

这是一个经过稍微修改的测试 ( JSFiddle ),它通过了:

test("ajax tests", function () {
var xhr = sinon.useFakeXMLHttpRequest(),
requests = [],
mockURI = '/some/article',
mockData = {
someProperty: "dummy content"
};

xhr.onCreate = function (request) {
requests.push(request);
};

$.ajax(mockURI, {
data: JSON.stringify(mockData),
type: 'POST'
});

equal(requests.length, 1);
equal(requests[0].url, mockURI);
equal(JSON.parse(requests[0].requestBody).someProperty, mockData.someProperty);

xhr.restore();
});

至于这篇文章,我没有真正研究代码,但它似乎有效:JSFiddle .

关于javascript - Sinon.js、QUnit 和 Jquery。尝试通过 FakeXMLHttpRequest 验证发布的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24422714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com