2016-09-28 71 views
0

在我的測試環境中,我使用mocha作爲測試運行器。我曾經在一個setup.js文件,我配置與摩卡運行在啓動時使用節點:在摩卡啓動時執行異步功能

mocha --require setup.js 

我使用sequelize我的ORM,我希望它與force標誌設置爲初始化配置NODE_ENV爲「測試」真正。我應該在哪裏執行sync功能?

import models from '../src/data/models'; 
models.sync({ 
    force: true 
}); 

由於它是一個異步函數,測試可能在同步階段完成之前開始。

+0

您需要使用before鉤子。由於同步返回一個承諾,你應該在之前編寫 (function(){return models.sync({force:true})}) – aray12

+0

我應該在哪裏寫這個鉤子?我沒有一個包含所有測試的主文件,我執行如下測試:'mocha \「src/**/*。test.js \」--require test/setup.js --compilers js: babel-register' – itaied

+0

我在下面評論了你應該如何明確地重建你的數據庫,以便依賴於數據庫的每個測試。如果你仍然對一些全局鉤子感興趣,我建議你檢查一下我發佈的另一個答案http://stackoverflow.com/questions/28191243/how-can-i-make-mocha-load-a-helper-js-file- that-defines-global-hooks-or-utilitie/36266849#36266849 - 基本上你可以通過將它放在任何describe塊之外來編寫全局鉤子。我再次不推薦它,因爲它不是明確的,很難追蹤突變,但取決於你... – aray12

回答

1

在運行到全局before處理程序的測試之前,添加需要運行的任何初始化代碼或代碼。

before(function() { 
    //models code here 
    return models.sync({}); 
}) 
+0

我在哪裏寫'before'?我的測試文件中有許多前處理程序,但我沒有包含所有測試的主文件。 – itaied

+0

我會添加一個助手文件,你可以在任何需要設置的測試中「需要」。 – ckross01

+0

但是'sync'是一個昂貴的過程,我希望它在所有測試之前只發生一次。 – itaied