我怎样才能得到摩卡独立运行我的testing?

我正在使用摩卡来运行使用节点编写的testing。 我的假设是,我的每个testing都会被隔离开来。 这似乎并非如此。 在testing目录上运行mocha时,它似乎将所有testing文件加载在一起,然后执行每个testing套件。

当一个testing中使用模块时,这可能会中断隔离,这可能会受到另一个testing中使用的模块的影响。

在这个Gist( 失败的摩卡testing )中,我有两个模块(a和b)和两个testing(atesting和btesting)。 如果你在每次testing中独立运行摩卡,他们都会成功:

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

但是,如果我一起运行这些testing,atesting失败:

 $ mocha --ui tdd . 

是否真的有必要为每个单独的testing运行摩卡以得到适当的隔离?

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

如果在一个命令中一起运行所有的规格,它将把所有的模块加载到一个testing环境中。

如果没有代码来重置单例实例或者在需要的时候创build一个新的实例,那么单例模式通常很难testing。

所以,你可能应该重构你的代码。 在a.js添加一个重置函数来重置targets = [];

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

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

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