其他节点开发人员如何在单元测试中使用sinon模拟构造函数调用?例如,假设我有一些函数foo在节点中模仿构造函数
function foo() {
var dependency = new Dependency(args);
// do stuff with dependency
}
exports.module.foo = foo;
,并在一个单独的测试文件我有一些测试中,我想核实一下相关的构造函数被调用(参数),我需要控制什么返回
的问题是,兴农可以附加到一个对象只有模拟功能,所以我们要构造附加到一个对象时,它可以被嘲笑了。
我一直在做的只是把对象的构造函数连接到制作构造函数调用的模块中,调用构造函数作为对象的方法,然后导出对象使用它在测试中:
var Dependency = require('path/to/dependency');
var namespace = {
Dependency: Dependency
}
function foo() {
var dependency = new namespace.Dependency(args);
// do stuff with dependency
}
exports.moduole.foo = foo;
exports.module.namespace = namespace;
testfile的:
it('should call Dependency constructor with bar', function() {
var foo = require('myModule').foo;
var namespace = require('myModule').namespace;
var DependencyMock = sinon.mock(namespace, 'Dependency').returns(0);
foo();
expect(DependencyMock.calledWith(bar)).to.equal(true);
});
这工作,但感觉很笨重,露出我的模块上的对象只是为了测试它的缘故。
任何提示?
感谢您的回复。据我所知,我遇到了同样的问题,因为我不能监视Dependency的实际构造函数调用,因为Dependency不是任何属性。问题在于我如何设计我的代码,并且使用像上面Jan所示的依赖注入似乎对我来说是最好的解决方案。 –