mocha全球`之前'只执行一次

时间:2017-12-24 07:52:03

标签: javascript node.js mocha functional-testing

我正在使用mocha进行node.js功能测试。

我的测试中有几个文件。

如何在所有测试开始之前只运行一段代码?

例如,我可能必须在所有测试开始之前设置一个docker容器。 可以用mocha做到这一点吗?

before挂钩为每个测试文件运行一次。这不符合我的需要。

3 个答案:

答案 0 :(得分:3)

你可以拥有' root'级别挂钩,如果你把它们放在任何描述块之外。因此,您可以将相关代码放在测试文件夹中的任何文件中。

before(function() {
  console.log('before any tests started');
});

请参阅文档:http://mochajs.org/#root-level-hooks

答案 1 :(得分:0)

有一个非常干净的解决方案。在您的mocha命令中使用--file作为参数。对于您的测试,它就像全局挂钩一样。

xargs mocha -R spec --file <path-to-setup-file>

设置文件如下所示:

'use strict';
const mongoHelper = require('./mongoHelper.js');

console.log("[INFO]: Starting tests ...");
// connect to database

mongoHelper.connect()
.then(function(connection){
  console.log("[INFO]: Connected to database ...");
  console.log(connection);
})
.catch(function(err){
  console.error("[WARN]: Connection to database failed ...");
  console.log(err);
});

不幸的是,我没有在此安装文件中找到使用异步/等待的方法。因此,我认为您可能必须同意使用“旧的” promise和回调代码。

答案 2 :(得分:0)

Mocha 8引入了root hook plugins的概念。在您的情况下,相关的是beforeAllafterAll,它们将在所有测试之前/之后运行一次,因此您需要串行运行测试。

您可以写:

exports.mochaHooks = {
  beforeAll(done) {
    // do something before all tests run
    done();
  },
};

您将不得不使用--require标志添加此文件。

有关更多信息,请参见docs