模拟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.js
unit 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']); }); });
而且没有不安定的要求。
免责声明:我是其中一个作者的嘲笑:)