我发现使用Quit测试jQueryajax非常困难。
特别是,我很难尝试使用Quit的模块结构和setUp和tearDown方法来减少重复代码。以下工作:
test("ajax request is 200 OK", function () {
var xhr = sinon.useFakeXMLHttpRequest();
var requests = sinon.requests = [];
xhr.onCreate = function (request) {
requests.push(request);
};
var callback_success = sinon.spy();
$.ajax('/course/data', {
success: callback_success,
});
equal(sinon.requests.length, 1);
equal(sinon.requests[0].url, "/course/data");
requests[0].respond(200, { "Content-Type": "application/json" }, '[]');
ok(callback_success.called);
});
我有一个JSFiddle,它显示了一个失败的测试(编号11)。(之前的测试是我写的,当时我正试图了解一切)。
具体来说,我的问题是:当我在第115行的全局范围中声明了var requests;
时,为什么测试报告失败并带有"requests is undefined"?
感谢您的解释!(编辑:由于某种原因,链接的JSFiddle显示了sinon.js的问题,当我从我的fiddle帐户运行JSFiddl时不明显?)
找到了在我的JSFiddle中未定义请求的问题的解决方案。我的测试模块的设置函数从未被调用过。出于某种原因,我使用camelCase来定义设置和拆卸:
setUp: function () { .....},
tearDown: function() {....}
当然什么时候应该只是普通的
setup: function () {...},
teardown: function () {...}
所以,基本上是我的一个区分大小写的错误,再加上我发现ajax、qunit和sinon非常令人费解。