首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何模拟导出默认和对象的npm模块

如何模拟导出默认和对象的npm模块
EN

Stack Overflow用户
提问于 2020-06-02 07:26:40
回答 2查看 35关注 0票数 0

我已经创建了一个库,它导出包含一些实用函数的默认对象。除了默认,我还导出了几个枚举。下面是我的导出在库的根文件中的样子

代码语言:javascript
运行
复制
exports.default = new _oAuth2.default();
var OAUTH_LOG_LEVELS = exports.LOG_LEVELS = {DEBUG: 10, WARN: 20};
var OAUTH_VERSIONS = exports.VERSIONS = {V1: '1.0', v2: '2.0'}

在我的react应用程序中,我像这样导入和使用值

代码语言:javascript
运行
复制
import lib1, {VERSIONS, LOG_LEVELS} from 'mylib';

lib1.init({
  verion: VERSIONS.V1,
})

在应用程序中一切运行正常。这是我的模仿

代码语言:javascript
运行
复制
jest.mock('myLib', () => ({
  init: jest.fn(),
}));

现在,我的问题是,如何模拟该库以包含枚举和默认值?我尝试了多种方法,但都没有成功。否则,我就不能使用库公开的枚举。当我尝试使用它时,单元测试抛出了一个未定义版本的错误。

EN

回答 2

Stack Overflow用户

发布于 2020-06-02 08:27:30

使用jest.requireActual获取实际导出的值,并仅覆盖您需要的值。

代码语言:javascript
运行
复制
jest.mock('myLib', () => ({
  ...jest.requireActual('myLib'),
  init: jest.fn(),
}));

根据您设置导出的方式,您可能需要类似于...jest.requireActual('myLib').default的内容。

票数 0
EN

Stack Overflow用户

发布于 2020-06-02 23:34:41

在深入研究Jest文档之后,我找到了一种显式地将该库模拟为esModule的方法。我将我的mock更新为

代码语言:javascript
运行
复制
jest.mock('myLib', () => ({
  __esModule: true,
  default: {
    init: jest.fn(),
  },
  VERSIONS: {V1: '1.0'},
}));

这解决了我的问题。

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

https://stackoverflow.com/questions/62142496

复制
相关文章

相似问题

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