2012-06-14 64 views
3

我需要一些幫助理解QUnit內部。 我不時讀到它的源碼,但是當談到異步測試時,我還在寫奇怪的測試。 我理解異步測試的概念,以及stop()和start()方法(以及爲什麼需要它們),但是當我將它們與setup和teardown結合使用時,我會遇到很多困難的情況。QUnit異步測試與安裝和拆解

這裏是我的Testcode:

use(['Psc.Exception','Psc.Code'], function() { 
    module("async", { 
    setup: function() { 
     console.log('setup'); 
    }, teardown: function() { 
     console.log('teardown'); 
    } 
    }); 

    asyncTest("test1", function() { 
    expect(0); 

    console.log('test1'); 
    start(); 
    }); 

    asyncTest("test2", function() { 
    expect(0); 

    console.log('test2'); 
    start(); 
    }); 

    asyncTest("test3", function() { 
    expect(0); 

    console.log('test3'); 
    start(); 
    }); 

    asyncTest("test4", function() { 
    expect(0); 

    console.log('test4'); 
    start(); 
    }); 

    asyncTest("test5", function() { 
    expect(0); 

    console.log('test5'); 
    start(); 
    }); 
}); 

Allthough這些asynchron測試,我想我會得到這樣的事情在控制檯:

setup 
test1 
teardown 
setup 
test2 
teardown 
setup 
test3 
teardown 
... 

,因爲我認爲qunit會叫的安裝和拆卸在測試身體周圍?

但我把所有的事情混在一起,從請求到請求以另一種方式混洗。

setup 
test1 
teardown 
setup 
setup 
setup 
setup 
test5 
teardown 
test4 
teardown 
test3 
teardown 
test2 
teardown 

有人能夠一步一步解釋嗎?

+1

沒問題,所以我停止瞭解這個問題。我剛來到解決方案,如果這樣從qunit調用這個設置函數是沒用的。因爲「全局」測試變量將始終被覆蓋。所以我開始把我的設置功能包括進測試本身,這很好用 –

+1

Max Cantor認爲你可能在QUnit中發現了一個錯誤。你可以在GitHub上找到他的錯誤報告並解決這個問題:https://github.com/jquery/qunit/pull/320 –

+0

用'asyncTest'函數設置/拆卸仍然有些bug。即使是「修復」。在我的測試中,它似乎更好,但它最終打嗝並連續進行多次調用。也許,如果我調試了qunit代碼,我會更好地理解這個問題,但我覺得我不應該這樣做。相反,正如@ P.scheit提到的那樣,我認爲我會在模塊化設置/拆解中發現我的依賴關係。可能完全... –

回答

6

這是一個記錄的問題:

http://api.qunitjs.com/QUnit.config/

其建議QUnit.config.autostart設置爲false,異步加載測試時。這是我的情況,因爲「使用」是異步執行的。

頭看起來是這樣的:

QUnit.config.autostart = false; 
use(['Psc.Exception','Psc.Code'], function() { 

    QUnit.start(); 
    module("async", { 

所以它基本上喜歡做的stop()和start(),但加載測試本身。我測試了它,拆卸/設置/測試現在按照正確的順序正確執行。