javascript - 在 Node.js 中监视 require

标签 javascript node.js unit-testing mocha.js sinon

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

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

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

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

所以问题是:如何验证是否使用正确的参数调用了 require?我使用 Sinon.js spy 进行了尝试:

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

但这行不通。当我运行测试时,Mocha 告诉我:

Error: expected 0 to equal 1

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

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

最佳答案

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

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

var proxyquire =  require('proxyquire');

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

我不确定这是否正是您想要的,但也许您会发现它有帮助。

关于javascript - 在 Node.js 中监视 require,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20677648/

相关文章:

sql - 使用 Sequelize 即时创建新表

angular - 类型错误 : Cannot read property 'prod_id' of undefined

javascript - 为什么我的 in for each 循环只添加最后一个元素?

javascript - 运算符 '<' 无法通过 Excel 加载项应用于类型 'number' 和 'Promise<void>'

node.js - Node-Foreman 在部署到 Heroku 时不加载环境变量

c++ - QTest 和 void 函数

android - 在 Android 1.6 上运行 jUnit 测试时出现 VerifyError

javascript - TabPanel 中的 ExtJs Grid 自动调整问题

Javascript - 如何在不显示文本区域的情况下将文本复制到剪贴板?

node.js - 如何使用 next.js 构建博客?