在提出问题之前搜索了一段时间。
.
|____lib
| |____bar.js
| |____baz.js
| |____foo.js
|____test
| |____bar.js
| |____baz.js
| |____foo.js
对于上述文件结构,./lib/foo.js
需要./lib/bar.js
,./lib/bar.js
需要./lib/baz.js
。
通过./lib/foo.js
进行单元测试./test/foo.js
,我想模仿./lib/bar.js
,因此,我只关注./lib/foo.js
。
一旦./test/foo.js
中的测试结束,我想重置/取消模拟./lib/bar.js
。
通过./lib/bar.js
进行单元测试./test/bar.js
,我想模仿./lib/baz.js
,因此,我只关注./lib/baz.js
。
一旦./test/foo.js
中的测试结束,我想重置/取消模拟./lib/baz.js
。
等等。
或者换句话说,我想在测试文件中模拟依赖项并在需要时重置。
很可能在测试文件中多次嘲笑并且在测试文件中重新进行重新测试。
或者可能是我可以使用一些文件级别的闭包变量来控制本地模拟
下面提到的StackOverflow帖子有很好的讨论,但我无法得出任何结论。
我遇到了以下模块
在上述内容中,mockery看起来像我的用例,主要是reset/un-mock the mocked dependency。
如何在proxyquire中实现相同目标?
是否还有其他模块可以解决上述用例?
答案 0 :(得分:2)
例如,为了测试foo.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']);
});
});
并且没有任何不必要的要求。
免责声明:我是deride的作者之一:)