目前,我正在使用proxquire单独测试一个模块,以覆盖该模块的要求。
用proxyquire覆盖需求的路径很好。例如:
var bar = require('./bar');但是,您是否也可以使用proxyquire来覆盖模块中测试所需的特定功能呢?所以,就像:
var bar = require('./foo').bar();为此,我需要继续使用proxyquire,因为我正在使用它来模拟发生在体系结构的另一层中的http请求。但是在测试的情况下,我也需要在模块中模拟“现在”的时间。
所以现在我有一个:
var uraStub = sendMockRequest(paramListOfCheckin, queryList);
var setNowStub = function(){ return 1425998221000; };
var checkin = proxyquire('../src/logic/logicHandlerModules/checkin', {
'../../persistence/ura' : uraStub,
'./checkin.setNow' : setNowStub
});
checkin.checkin(...)setNow的实现是:
var setNow = function(){
return new Date().getTime();
};
var checkin = function (...) {
var now = require('./checkin').setNow();proxyquire中的明显的'./checkin.setNow' : setNowStub不起作用,因为这是错误的路径。但是使用'./checkin'.setNow() : setNowStub也不起作用,因为对象定义中的语法错误。
有什么建议吗?
提前感谢!
发布于 2021-12-13 22:01:04
您要寻找的是noCallThru()和callThru()方法。https://github.com/thlorenz/proxyquire#preventing-call-thru-to-original-dependency
默认情况下,proxyRequire将调用模拟的依赖项,这将允许您选择要用自己的自定义函数覆盖的方法。
因此,如果路径'../foo‘中的依赖项有一个方法bar()和fooBar(),那么您就可以通过以下操作模拟bar。
proxyquire.callThru();
var fooFunc = proxyquire('../foo', {
bar: () => return 'bar'
})现在bar()将命中您的自定义覆盖函数,而fooBar()将被正常调用。
https://stackoverflow.com/questions/29014179
复制相似问题