2014-03-03 59 views
1

我使用卡斯帕儀模塊,我有這樣的結構:什麼時候應該在CasperJS中調用test.done()?

casper.start(); 

...(various then() and wait() calls) 

casper.then(function(){ 
    test.done(); 
    }); 
casper.run(); 

做這樣的說法似乎正常工作(除間歇計時器的問題,我一直在試圖解決)。

如果我改變以下,這是shown in the casper docs,並且我認爲是基本相同以上:

casper.start(); 

...(various then() and wait() calls) 

casper.run(function(){ 
    test.done(); 
    }); 

然後我得到「警告看起來你沒有運行任何測試。」我意識到這是因爲我沒有任何assert()電話呢!我添加了一個無端的斷言,並且警告消失了,現在我開始獲得有多少測試運行的報告等等。(間歇性計時器問題依然存在,所以必須是其他東西。)

但它讓我意識到我應該以第二種方式來做這件事,那顯然是有區別的。

有人可以解釋什麼區別,以及爲什麼第一個不能正常工作?我希望能夠更深入地瞭解CasperJS測試的工作原理!

+0

你好,你有沒有找到任何解決辦法?我有同樣的問題。謝謝。 – DzeryCZ

+0

@DzeryCZ我認爲我的問題的後半部分是解決方案(即'test.done()'必須在'run()'函數中完成,*和*您必須至少定義了一個斷言)。我仍然不明白的是爲什麼它很重要:-) –

+0

感謝您的解決方案。我可以想象這個原因與這些回調被調用的順序有關。可能有一些清理的事情,比如在casper.run結束之前關閉所有的網頁,然後執行其給定的回調,否則這些回調會被調用失序。 – encrest

回答

0

你最終then()(含呼叫done())不相當結束時done()被調用 - 它還有一個更要調用的函數。

另一方面,run()函數執行它的回調,當所有先前的步驟完成。從文檔:'你可以考慮作爲一個自定義的最後一步,執行所有其他步驟時執行。「

這在大多數情況下應該沒有什麼不同,因爲done()可能是最終的then的最後一步。它可能有所作爲,例如,如果done檢查所有步驟已完成。

來源: http://casperjs.readthedocs.org/en/latest/modules/casper.html#run

相關問題