[英]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.