使用qUnit,如果在測試中有異步代碼,我知道如何使用asyncTest()
,但是如果您有一個包含異步代碼的函數呢?測試包含異步代碼的函數
換句話說,異步請求不在測試範圍內,而僅僅是正在測試的代碼的一部分。
就拿這個代碼:
function makeAjaxCall(){
$.get('/mypage', {}, function(data){
// Do something with `data`
},'json');
}
我怎麼能說一個測試中makeAjaxCall()
,然後運行對從Ajax請求返回的data
測試?
這個答案似乎應該工作,但如果異步事件不是ajax請求呢?我唯一的選擇是否會從回調中手動進行事件觸發? – twiz 2013-03-28 04:34:58
我這麼認爲。你需要在異步進程中有一些鉤子並確定它已經完成。我不知道任何JavaScript構造都可以爲每種類型的異步操作執行此操作。您可以通過重寫實現並在幕後執行一些魔術來顯然創建自己的像window.setTimeout這樣的衆所周知的實例,但可以說更容易進行回調。 $ .Deferred可以幫助實現清潔。 – syazdani 2013-03-28 13:50:43