2014-12-31 46 views

回答

7

QUnit基本上希望人們停止使用global methods(不只是start()stop(),也test()expect()等)。因此,從版本1.16.0開始,您應該始終使用傳遞給test()函數的全局名稱空間(QUnit)或assert API參數。這包括新的async control

QUnit.test("testing async action", function(assert) { // <-- note the `assert` argument here 
    var done = assert.async(); // tell QUnit we're doing async actions and 
           // hold onto the function it returns for later 

    setTimeout(function() { // do some async stuff 
     assert.ok(true, "This happened 100 ms later!"); 

     done(); // using the function returned from `assert.async()` we 
       // tell QUnit we're don with async actions 
    }, 100); 
}); 

如果您熟悉做事的老start()stop()方式,你應該看到,這是極其相似的,但更多的條塊和可擴展性。

由於async()方法調用位於assert參數中,所以不能在beforeEach()函數中使用。如果你有一個你以前如何做的例子,請張貼它,我們可以嘗試弄清楚如何把它變成新的方式。

UPDATE

我的錯誤之前,該assert對象被傳遞到模塊上的beforeEachafterEach回調,所以你應該能夠做到這一點,你會爲測試做同樣的邏輯:

QUnit.module('set of tests', { 
    beforeEach: function(assert) { 
     var done = assert.async(); 
     doSomethingAsync(function() { 
      done(); // tell QUnit you're good to go. 
     }); 
    } 
}); 

+0

我有同樣的問題。以下是我在使用Ember應用程序進行集成測試時的用例:https://gist.github.com/tygriffin/0d8cae37c47b243588b9 – niftygrifty

+0

@niftygrifty我會建議在任何測試或模塊運行之前執行一次調用,並使用' QUnit.config.autostart = false;'然後一旦'$ .get()'完成保存返回數據並調用'QUnit.start();'來完成事情。 – jakerella

+0

對於我關聯的孤立用例,這是一個好主意,但理想情況下,我希望有一個拆卸端點以及許多不同的設置端點。我還想至少在每個模塊之間建立並拆卸,如果不是在每次測試之間。據我可以告訴'QUnit。start()'只能被調用一次才能啓動整個測試。是對的嗎? – niftygrifty

0

(在QUnit 1.17.1測試)看,沒有人已經應答了beforeEach/afterEa第一部分:測試套件應該在頁面加載後立即運行。當無法立即,然後再打配置QUnit:

QUnit.config.autostart = false; 

,並繼續設置您的測試套件(初始化測試,他們餵養QUnit,異步等待一些組件來加載,無論是AJAX或任何其他人),您的網站,最後,當它準備好了,只需要運行:

QUnit.start(); 

QUnit's docsite有它覆蓋。