如何让mocha独立运行我的测试?

时间:2015-12-24 21:59:27

标签: node.js unit-testing mocha

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

如果在一次测试中使用了模块,这可能会破坏隔离,这可能会受到另一次测试中使用的模块的影响。

在这个要点(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),我很惊讶地发现所有模块都加载到一个测试环境中。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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