在单元测试中,我想验证 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/