到目前为止,我一直在使用sinon来对我的nodeJS代码中包含的对象进行函数调用。
例如,我使用请求库,因此在我的测试中,我可以发出http调用,如:
var request = require('request');
//Somewhere further below in my tests:
postStub = sinon.stub(request, 'post');
我现在遇到了一个场景,我需要在我的实际代码中调用我所包含的库:
var archiver = require('archiver');
//Further below in actual code (express middleware)
var zip = archiver('zip');
zip.pipe(res);
我希望能够在归档程序库上存根对pipe()
的调用,但我认为我需要先构建构造函数调用 - archiver('zip')
?
我有一个搜索,我认为sinon的createStubInstance可以帮助我,但我不是百分百肯定。
有人可以协助吗? 感谢
答案 0 :(得分:0)
它并不漂亮,但我所做的似乎有效。 用另一种可导出的方法包装你的un-stubbable库函数。
file.js
exports.originalMethod = function() {
var archiver = require('archiver');
//Further below in actual code (express middleware)
var zip = exports.newArchiverMethod('zip');
zip.pipe(res);
}
exports.newArchiverMethod = function(arg) {
return archiver(arg);
}
这个newArchiverMethod可以被存根。
spec.js
archiverStub = sinon.stub(controller, 'newArchiverMethod');
它并不完美,因为它添加了一个新的可导出方法,并在原始文件中创建了不必要的混乱,以及不可测试的行。 但它确实让你通过这一行并测试其余的长方法。