如何 运行 递归地使用 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

使用 beforeEachafterEach 而不是 beforeafter。这将确保您的数据库清理代码在每次测试后执行,而不是在 describe 功能块中的最后一个测试后执行。详情 here.

可能性 2

您正在 运行使用 mocha-parallel-tests 或其他工具在多个线程中进行测试。确保正在访问数据库的测试没有被并行化。

可能性 3

您的 db.dropDatabase 在数据库实际删除之前调用 returns,同时请求仍未决。您必须检查您的连接或数据库设置。


如果没有任何帮助,请尝试在每个单元测试和 before/after 挂钩开始时插入日志语句,这将帮助您了解代码实际执行的时间 运行 并查看发生了什么顺序错误。

使用 jest,因为它提供了您正在寻找的内置功能。