模拟Node中的依赖(主要是unit testing)

在提出问题之前search了一会儿。

文件结构:

. |____lib | |____bar.js | |____baz.js | |____foo.js |____test | |____bar.js | |____baz.js | |____foo.js 

用例:

关于上述文件结构,./ ./lib/foo.js需要./lib/bar.js需要./lib/baz.js


当通过./test/foo.jsunit testing./lib/foo.js ,我想模拟./lib/bar.js ,所以我只关心./lib/foo.js 。 一旦./test/foo.js中的testing结束,我想重置/取消模拟./lib/bar.js

当unit testing./lib/bar.js通过./test/bar.js ,我想模拟./lib/baz.js ,所以,我只关心./lib/baz.js 。 一旦./test/foo.js中的testing结束,我想重置/取消模拟./lib/baz.js

等等等等。


或换句话说,我想嘲笑依赖关系,并在需要时重置在testing文件中。

最有可能在testing文件中嘲笑好几次,然后在testing文件中完成所有的testing。

或者可能是我可以控制本地模拟,一些文件级别closuresvariables


下面提到的StackOverflow的post有很好的讨论,但我不能得出任何结论。

  • 嘲笑Node中的依赖关系
  • 在NodeJS中是否需要dependency injection,或者如何处理…?

我碰到以下模块

  • 蔑视
  • n芯
  • horaa
  • 沙盒模块
  • 火起来
  • 一个
  • proxyquire
  • 换铁线

和其他几个 。


其中,看起来像嘲笑解决我的用例,主要是重置/取消嘲笑嘲笑的依赖 。

如何在proxyquire中实现相同?


还有没有其他模块可以解决这个用例?

我使用了嘲讽和rewire的组合。

例如要testingfoo.js我将:

 var rewire = require('rewire'); var deride = require('deride'); var Foo = rewire('../lib/foo'); var mockBar, foo; describe('something', function() { beforeEach(function() { mockBar = deride.stub(['barMethod']); mockBar.setup.barMethod.when('bob').toReturn('Hello bob'); Foo.__set__('bar', mockBar); foo = new Foo(); }); it('does something', function() { foo.someMethod('bob'); mockBar.expect.barMethod.called.withArgs(['bob']); }); }); 

而且没有不安定的要求。

免责声明:我是其中一个作者的嘲笑:)