我怎样才能让 mocha 单独用于 运行 我的测试?

How can I get mocha to run my tests in isolation?

我正在使用 mocha 来 运行 使用 node 编写的测试。我的假设是我的每个测试都将相互隔离。事实似乎并非如此。当您 运行 mocha 在测试目录上时,它似乎将所有测试文件一起加载,然后执行每个测试套件。

当您在一个测试中使用模块时,这可能会破坏隔离,而这些模块可能会受到另一测试中使用的模块的影响。

在这个 Gist (Failing Mocha Test) 中,我有两个模块(a 和 b)和两个测试(a-test 和 b-test)。如果您 运行 Mocha 在每个测试中独立进行,他们都成功了:

$ mocha --ui tdd a-test
$ mocha --ui tdd b-test

然而,如果我 运行 这些测试在一起,a-test 失败:

$ mocha --ui tdd .

是否真的有必要 运行 为每个单独的测试提供 mocha 以获得适当的隔离?

注意:a-test 失败的原因是它触发了一个调用 b 模块中的单例的事件。这不会发生在 b 检验的正常执行中。由于 a-test 提供了其完整的依赖集(不包括 b),我惊讶地发现所有模块都加载到一个测试环境中。

如果您 运行 在一个命令中将所有规范放在一起,它会将所有模块加载到一个测试环境中。

如果您没有重置单例实例或在需要时创建新实例的代码,那么单例模式通常很难测试。

所以,您可能应该重构您的代码。 在a.js中添加重置功能,重置targets = [];

然后将其添加到 b-test.js

suiteSetup("B", function(){
    a.reset();
});

或类似的东西会有所帮助。