2016-09-28 142 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