如何 运行 递归地使用 mocha 进行多个集成测试而不将它们的钩子全部组合在一起?
How to run multiple integration tests using mocha recursively without getting their hooks all combined?
我已经使用 mocha 进行了一些集成测试,当 运行 独立时 运行 很好,但是当我尝试 运行 它们时使用:mocha test --recursively
.
我在这里注意到的行为是所有的 after 钩子(可能也是 before 钩子)都被合并了。
我将我的数据库放在每个测试的 after
挂钩中,这样我就可以在测试之间进行检查,并且可以从以前的测试中找到数据。
在最后一次测试后不知何故被清除了。
我已经尝试将它们导入一个文件,但即使那样也达不到目的。
这是我的钩子。
before(async () => {
app.set('port', SERVER_PORT);
server = http.createServer(app);
server.listen(SERVER_PORT, () => console.log(`API running on localhost:${SERVER_PORT}`));
// Initial feeding of the database
await dookie.push('mongodb://localhost:27017/tests', SEEDDATA);
});
after(async () => {
await mongoose.connection.db.dropDatabase();
server.close();
process.exit(0);
});
谢谢
如果不仔细查看代码,很难判断您的测试有什么问题,所以我将在这里提出一些我想到的想法,但不能保证任何事情都会有所帮助。
可能性 1
使用 beforeEach
和 afterEach
而不是 before
和 after
。这将确保您的数据库清理代码在每次测试后执行,而不是在 describe
功能块中的最后一个测试后执行。详情 here.
可能性 2
您正在 运行使用 mocha-parallel-tests 或其他工具在多个线程中进行测试。确保正在访问数据库的测试没有被并行化。
可能性 3
您的 db.dropDatabase
在数据库实际删除之前调用 returns,同时请求仍未决。您必须检查您的连接或数据库设置。
如果没有任何帮助,请尝试在每个单元测试和 before/after 挂钩开始时插入日志语句,这将帮助您了解代码实际执行的时间 运行 并查看发生了什么顺序错误。
使用 jest,因为它提供了您正在寻找的内置功能。
我已经使用 mocha 进行了一些集成测试,当 运行 独立时 运行 很好,但是当我尝试 运行 它们时使用:mocha test --recursively
.
我在这里注意到的行为是所有的 after 钩子(可能也是 before 钩子)都被合并了。
我将我的数据库放在每个测试的 after
挂钩中,这样我就可以在测试之间进行检查,并且可以从以前的测试中找到数据。
在最后一次测试后不知何故被清除了。
我已经尝试将它们导入一个文件,但即使那样也达不到目的。
这是我的钩子。
before(async () => {
app.set('port', SERVER_PORT);
server = http.createServer(app);
server.listen(SERVER_PORT, () => console.log(`API running on localhost:${SERVER_PORT}`));
// Initial feeding of the database
await dookie.push('mongodb://localhost:27017/tests', SEEDDATA);
});
after(async () => {
await mongoose.connection.db.dropDatabase();
server.close();
process.exit(0);
});
谢谢
如果不仔细查看代码,很难判断您的测试有什么问题,所以我将在这里提出一些我想到的想法,但不能保证任何事情都会有所帮助。
可能性 1
使用 beforeEach
和 afterEach
而不是 before
和 after
。这将确保您的数据库清理代码在每次测试后执行,而不是在 describe
功能块中的最后一个测试后执行。详情 here.
可能性 2
您正在 运行使用 mocha-parallel-tests 或其他工具在多个线程中进行测试。确保正在访问数据库的测试没有被并行化。
可能性 3
您的 db.dropDatabase
在数据库实际删除之前调用 returns,同时请求仍未决。您必须检查您的连接或数据库设置。
如果没有任何帮助,请尝试在每个单元测试和 before/after 挂钩开始时插入日志语句,这将帮助您了解代码实际执行的时间 运行 并查看发生了什么顺序错误。
使用 jest,因为它提供了您正在寻找的内置功能。