使用sinon对库构造函数进行调用

时间:2017-02-27 11:10:02

标签: node.js sinon sinon-chai archiverjs

到目前为止,我一直在使用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可以帮助我,但我不是百分百肯定。

有人可以协助吗? 感谢

1 个答案:

答案 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');

它并不完美,因为它添加了一个新的可导出方法,并在原始文件中创建了不必要的混乱,以及不可测试的行。 但它确实让你通过这一行并测试其余的长方法。