我使用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),我很惊讶地发现所有模块都加载到一个测试环境中。
答案 0 :(得分:2)
如果您在一个命令中一起运行所有规范,它将把所有模块加载到一个测试环境中。
如果您没有代码来重置单例实例或在需要时创建新代码,则单例模式通常很难测试。
所以,你可能应该重构你的代码。
在a.js
中添加重置功能以重置targets = [];
然后将其添加到b-test.js
suiteSetup("B", function(){
a.reset();
});
或类似的东西会有所帮助。