我正在使用mocha进行node.js功能测试。
我的测试中有几个文件。
如何在所有测试开始之前只运行一段代码?
例如,我可能必须在所有测试开始之前设置一个docker容器。 可以用mocha做到这一点吗?
before
挂钩为每个测试文件运行一次。这不符合我的需要。
答案 0 :(得分:3)
你可以拥有' root'级别挂钩,如果你把它们放在任何描述块之外。因此,您可以将相关代码放在测试文件夹中的任何文件中。
before(function() {
console.log('before any tests started');
});
答案 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的概念。在您的情况下,相关的是beforeAll
和afterAll
,它们将在所有测试之前/之后运行一次,因此您需要串行运行测试。
您可以写:
exports.mochaHooks = {
beforeAll(done) {
// do something before all tests run
done();
},
};
您将不得不使用--require
标志添加此文件。
有关更多信息,请参见docs。