2017-03-08 130 views
1

我使用摩卡的runner.on("fail", postProcessFunction)來執行一些後處理,當一個測試失敗。摩卡在測試失敗不能做異步功能

請參見:https://github.com/mochajs/mocha/blob/master/lib/runner.js#L58

我的問題是,postProcessFunction函數中我需要調用一個函數slowFunction創建一個文件,並返回一個承諾。承諾需要10秒鐘才能解決,到那時,摩卡已經完成了下一次測試或停止執行。 slowFunction函數沒有完成執行,並且文件永遠不會被創建。

我已經試過處理的承諾與promise.then(something)還包裹postProcessFunction在Q.async的那麼yield荷蘭國際集團到slowFunction,但我似乎從來沒有得到它等待緩慢的功能完成後再繼續。

注意:我不能使用全局afterEach,因爲測試已經具有套件級別afterEach,它將在全局afterEach之前執行。我需要在故障時立即執行slowFunction

回答

0

您可以在afterEach中檢測到測試故障,這將允許您使用標準的摩卡異步設置。

afterEach('Test failure debug', function(){ 
    debug('Test result', this.currentTest) 
    if (this.currentTest.state === 'failed') { 
    return page.source().then(src => debug('Page source', src)) 
    } 
}) 

在這種特定情況下page變量在describe塊作用域所以它在測試中都和前/後傭工可用。

+0

我已經考慮過這個解決方案,但我的測試已經在每個塊之後。我希望在每次測試之後以及在任何其他之後執行它們。 – jmccure

+0

您可以使用async/await – Lukus