使用Qunit模块setUp tearDown来测试ajax

时间:2015-02-23 00:36:59

标签: ajax qunit sinon

我发现使用Qunit来测试jQuery ajax非常困难。

特别是我难以尝试使用Qunit的模块构造和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;时,为什么测试报告失败且'请求未定义'?

感激地收到了解释! (编辑:由于某种原因JSFiddle链接显示sinon.js的问题,当我从我的小提琴账户运行JSFiddle时不明显?)

1 个答案:

答案 0 :(得分:0)

找到我JSFiddle中未定义请求问题的解决方案。我的测试模块的设置功能从未被调用过。出于某种原因,我使用camelCase来定义设置和拆卸:

setUp: function () { .....},
tearDown: function() {....}

当然应该只是简单

setup: function () {...},
teardown: function () {...}

所以,基本上我是一个区分大小写的错误,再加上我发现ajax,qunit和sinon相当令人费解的事实。