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

mck*_*oss 6 unit-testing mocha.js node.js

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

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

在这个Gist(失败的摩卡测试)中,我有两个模块(a和b)和两个测试(a-test和b-test).如果你在每次测试中独立运行Mocha,他们都会成功:

$ mocha --ui tdd a-test
$ mocha --ui tdd b-test
Run Code Online (Sandbox Code Playgroud)

但是,如果我一起运行这些测试,那么a-test就会失败:

$ mocha --ui tdd .
Run Code Online (Sandbox Code Playgroud)

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

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

Ana*_*d S 2

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

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

因此,您可能应该重构您的代码。添加重置功能来a.js重置targets = [];

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

suiteSetup("B", function(){
    a.reset();
});
Run Code Online (Sandbox Code Playgroud)

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