繁体   English   中英

在Node.js中窥探require

[英]Spy on require in Node.js

在单元测试中,我想验证SUT调用是否require特定参数。 基本上我的SUT是一个小模块,具有以下实现:

module.exports = function () {
  require('foo');
};

我现在想写一个这样的测试:

var sut = require('./sut');
it('requires foo.', function () {
  sut();
  expect( ??? );
});

所以问题是:如何验证是否使用正确的参数调用require 我用Sinon.js间谍试了一下:

var spy = sinon.spy(require);
sut();
expect(spy.callCount).to.be.equal(1);
expect(spy.calledWithExactly('foo')).to.be(true);
require.restore();

但这不起作用。 当我进行测试时,摩卡告诉我:

错误:预期0等于1

我做错了什么,我该如何解决?

PS:我不需要用Sinon.js工作,所以如果另一个模块是更适合我的情况,其他的一切都是精也。

有一个名为proxyquire的模块,您可以使用该模块覆盖单元测试purpopses的依赖项: https ://npmjs.org/package/proxyquire

您的单元测试可能如下所示:

var proxyquire =  require('proxyquire');

var sut = proxyquire('./sut', { 'foo': function(){ /* insert test code here */ });

我不确定这是不是你想要的,但也许你会觉得它很有帮助。

你可以试试重新连线 它允许您私有访问模块以进行测试。 然后你可以检查module.children以检查依赖性。

鉴于你想检查模块a.js需要b.js它看起来像:

var rewire = require("rewire");
var a = rewire("./a.js"); // using rewire instead of require

var pathToB = require.resolve("./b.js");
var aModule = a.__get__("module"); // leaking the private module-variable

assert.ok(aModule.children.some(function (module) {
    return module.filename === pathToB;
}));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM