2012-01-13 78 views
4

我有一個異步QUnit測試,如果操作超時,測試應該通過。 (我正在測試,如果你省略了可選的errorCallback並做了一些可能會引發錯誤的事情,無論你等待多久都沒有任何反應。)期待超時QUnit

我該怎麼做?如果我使用Qunit.config.testTimeout,那麼測試將在超時時失敗。我想設置一個超時,並在達到超時時測試成功。

回答

5

爲什麼不只是通過setTimeout調用使測試成功?

如:

expect(1); 
stop(); 
doOperation(function() { 
    start(); 
    ok(false, "should not have come back"); 
}); 
setTimeout(function() { 
    start(); 
    ok(true); 
}, timeoutValue); 
+0

非常好!我使用了三個單獨的異步測試,並在超時之前完成了3個超時的情況下清除超時。如果超時被觸發,我做了一個start(n),其中n是尚未完成的異步回調的數量,以便一起移動測試。謝謝! – 2013-03-26 22:31:08

0

這是我在這種情況下怎麼辦(大約):

function timeout(assert,to,error){ 
    var done = assert.async(); 
    var a = setTimeout(function(){ 
    assert.equal(to,undefined,error); 
    done(); 
    },to); 
    return function(){ 
    done(); 
    clearTimeout(a); 
    }; 
} 

那麼你可以:

... 
var done = timeout(assert,2000,"not joined"); 
r.join(function(data){ 
    assert.ok(true,"join confirmed"); 
    done(); 
}) 

您可以agument timeout功能timeout(assert,to,toCB)並執行toCB而不是我的假人assert.equal