【问题标题】:Node: Executing async functions on mocha startup节点:在 mocha 启动时执行异步函数
【发布时间】:2016-09-28 21:23:44
【问题描述】:

在我的测试环境中,我使用mocha 作为我的测试运行器。我已将NODE_ENV 配置为setup.js 文件中的“测试”,我将其配置为在启动时使用mocha 运行

mocha --require setup.js

我使用sequelize 作为我的ORM,我希望它在force 标志设置为true 的情况下初始化。我应该在哪里执行sync 函数?

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

由于它是一个异步函数,测试可能会在同步阶段完成之前开始。

【问题讨论】:

  • 你需要使用 before 钩子。由于同步返回一个承诺,你应该写 before(function() { return models.sync({ force: true }) })
  • 我应该在哪里写这个钩子?我没有包含所有测试的主文件,我执行这样的测试:mocha \"src/**/*.test.js\" --require test/setup.js --compilers js:babel-register
  • 我在下面评论了您应该如何为依赖于数据库的每个测试显式重建数据库。如果您仍然对某些全局钩子感兴趣,我建议您查看我发布的另一个答案 stackoverflow.com/questions/28191243/… - 基本上您可以通过将全局钩子放在任何描述块之外来编写全局钩子。再说一次,我真的不推荐它,因为它不是明确的,也很难跟踪突变,但取决于你......

标签: javascript node.js mocha.js


【解决方案1】:

将在测试运行之前需要运行的任何初始化或代码添加到全局 before 处理程序。

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

【讨论】:

  • 我在哪里写这个before?我的测试文件中有很多之前的处理程序,但我没有包含所有测试的主文件。
  • 我会添加一个帮助文件,您可以在任何需要设置的测试中require
  • 但是sync 是一个昂贵的过程,我希望它在所有测试之前只发生一次。
  • 理想情况下,您应该在每次测试之前拆除并重建数据库。原因是您在每次测试之前对数据库的状态有一个完美的了解。否则,您将不得不跟踪整个测试套件的突变以追踪潜在的错误。运行测试需要更长的时间,但编写和调试测试需要的时间要少得多——这完全值得
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2014-02-08
相关资源
最近更新 更多