使用qUnit,如果你的测试中有异步代码,我理解如何使用asyncTest()
,但如果你有一个包含异步代码的函数怎么办?
换句话说,异步请求不在测试范围内,而只是正在测试的代码的一部分。
以此代码为例:
function makeAjaxCall(){
$.get('/mypage', {}, function(data){
// Do something with `data`
},'json');
}
如何在测试中调用makeAjaxCall()
,然后对从ajax请求返回的data
运行测试?
答案 0 :(得分:1)
在这种情况下,您可以使用jQuery Global Ajax Event Handlers。在调用之前绑定它,在完成测试后解除绑定,可能通过Qunit中的模块方法。
像(未经测试)的东西:
asyncTest(function() {
expect(1);
$(document).ajaxSuccess(function(e, xhr, settings) {
var jsonRep = JSON.parse(xhr.responseText);
// assert on jsonRep
//ok(true);
});
$(document).ajaxError(function(e) {
ok(false);
});
$(document).ajaxComplete(function() {
start();
$(document).unbind('ajaxSuccess ajaxError ajaxComplete');
});
makeAjaxCall();
});
请注意全局处理程序do not have access to the parsed contents,您必须使用JSON.parse自行重新解析它们。不理想,但我不知道另一种方式。
答案 1 :(得分:0)