[英]Testing for a function that contains asynchronous code
使用qUnit,我了解如果测试中包含异步代码,那么如何使用asyncTest()
,但是如果您具有包含异步代码的函数,该怎么办?
换句话说,异步请求不在测试中,而只是被测试代码的一部分。
以下面的代码为例:
function makeAjaxCall(){
$.get('/mypage', {}, function(data){
// Do something with `data`
},'json');
}
如何在测试中调用makeAjaxCall()
,然后对从ajax请求返回的data
进行测试?
在这种情况下,您可以使用jQuery Global Ajax事件处理程序 。 在调用之前将其绑定,完成测试后即可取消绑定(可能通过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();
});
请注意,全局处理程序无权访问已解析的内容 ,而您必须使用JSON.parse自己重新解析它们。 不理想,但我不知道另一种方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.