我有以下QUnit测试情况下,尝试验证通过JQuery的AJAX请求中发送的发布数据:Sinon.js,QUnit和Jquery。试图通过FakeXMLHttpRequest
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函数处理字符串数据的方式不同。感谢您解释良好的解决方案。 –