3

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

有人可以帮忙吗?谢谢

4

1 回答 1

0

它不漂亮,但我所做的似乎有效。用另一种可导出的方法包装您的非存根库函数。

文件.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 进行存根。

规范.js

archiverStub = sinon.stub(controller, 'newArchiverMethod');

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

于 2017-09-22T08:28:42.200 回答