首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nodeJS proxyquire覆盖要求的特定功能

nodeJS proxyquire覆盖要求的特定功能
EN

Stack Overflow用户
提问于 2015-03-12 15:42:49
回答 1查看 1.3K关注 0票数 3

目前,我正在使用proxquire单独测试一个模块,以覆盖该模块的要求。

用proxyquire覆盖需求的路径很好。例如:

代码语言:javascript
复制
var bar = require('./bar');

但是,您是否也可以使用proxyquire来覆盖模块中测试所需的特定功能呢?所以,就像:

代码语言:javascript
复制
var bar = require('./foo').bar();

为此,我需要继续使用proxyquire,因为我正在使用它来模拟发生在体系结构的另一层中的http请求。但是在测试的情况下,我也需要在模块中模拟“现在”的时间。

所以现在我有一个:

代码语言:javascript
复制
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的实现是:

代码语言:javascript
复制
var setNow = function(){
  return new Date().getTime();
};

var checkin = function (...) {
  var now = require('./checkin').setNow();

proxyquire中的明显的'./checkin.setNow' : setNowStub不起作用,因为这是错误的路径。但是使用'./checkin'.setNow() : setNowStub也不起作用,因为对象定义中的语法错误。

有什么建议吗?

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2021-12-13 22:01:04

您要寻找的是noCallThru()和callThru()方法。https://github.com/thlorenz/proxyquire#preventing-call-thru-to-original-dependency

默认情况下,proxyRequire将调用模拟的依赖项,这将允许您选择要用自己的自定义函数覆盖的方法。

因此,如果路径'../foo‘中的依赖项有一个方法bar()和fooBar(),那么您就可以通过以下操作模拟bar。

代码语言:javascript
复制
proxyquire.callThru();

var fooFunc = proxyquire('../foo', {
  bar: () => return 'bar'
})

现在bar()将命中您的自定义覆盖函数,而fooBar()将被正常调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29014179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档