2013-04-23 121 views
0

我寫了一個小腳本,它從磁盤加載我的SpecRunner.html(茉莉花單元測試)。 雖然一切都很好,但測試不會執行。 這裏是我的代碼:茉莉花單元測試沒有在phantomjs腳本中執行

var page = require('webpage').create() 
    , file = "./SpecRunnerCoverage.html" ; 

page.open(file, function (status) { 
    var json = page.evaluate(function() { 
     return window._yuitest_coverage; 
    }); 

    console.log(JSON.stringify(json)); 
    phantom.exit(); 
}); 

它執行如下:

$> phantomjs myScript 

從代碼覆蓋率數據,我可以告訴被執行沒有測試。無論如何,我可以執行這些測試嗎?

非常感謝

更新:我剛剛注意到,當我環繞評估功能的setTimeout和延遲整個過程中,它的工作原理。有沒有比setTimeout更好的解決方案?

回答

1

當調用window.onload時,茉莉花啓動過程開始運行測試,因此在幻像頁加載回調被調用時,您的規格不一定會完成。通過使用setTimeout,您可以讓頁面加載後讓測試在瀏覽器中運行。 setTimeout仍然很脆弱,因爲隨着您添加更多規格,運行整個套件所花費的時間將會改變,您當前的超時時間可能不夠長,無法讓套件完成。

如果您的項目可能有ruby依賴項,您可以使用jasmine ruby gem。該gem包含一個rake任務rake jasmine:ci,它將啓動一個包含測試的服務器,並使用幻影加載該頁面,並等待所有規格完成並將故障輸出到命令行。