首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jest -模拟默认导出模块

Jest -模拟默认导出模块
EN

Stack Overflow用户
提问于 2021-12-21 14:16:08
回答 1查看 2K关注 0票数 0

我有一个模块,它可以导出缺省值。

代码语言:javascript
复制
import { createNamespace } from 'node-request-context';
const namespace = createNamespace('request-metadata');

export default namespace;

在另一个文件中需要此模块,如下所示:

代码语言:javascript
复制
....
import loggingContext from '../utils/loggingContext';
....

export function myFunc(data) {
  return new Promise((resolve, reject) => {
    ......
    loggingContext.run(() => {
      loggingContext.set('metadata', {
         userId
      });
    });
    const userEmail = loggingContext.get('metadata', 'email');
  });
}

...

因此,我们可以看到loggingContext模块导出rungetset方法。我想在我的单元测试中模拟它和那些方法,但是我一直收到一个错误:

TypeError: Cannot read property 'metadata' of undefined

这是我最近一次试图嘲弄它

代码语言:javascript
复制
import loggingContext from '../../src/utils/loggingContext';

jest.mock('../../src/utils/loggingContext', () => {
  return {
    __esModule: true,
    default: {
      run: jest.fn(),
      get: jest.fn(),
      set: jest.fn(),
    }
   };
});

请告诉我怎么才能正确地模仿它?

EN

回答 1

Stack Overflow用户

发布于 2021-12-21 16:14:18

您可以尝试像这样模拟它,首先导入默认的导出模块。

代码语言:javascript
复制
const loggingContext = require('../../src/utils/loggingContext');

然后使用jest.mock()模拟这个模块

代码语言:javascript
复制
jest.mock('../../src/utils/loggingContext');

现在,您可以为这个模块编写预期的模拟实现,如下所示

代码语言:javascript
复制
const mockObject = {
  run: jest.fn(),
  get: jest.fn(),
  set: jest.fn(),
}
loggingContext.mockImplementationOnce(() => mockObject);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70436883

复制
相关文章

相似问题

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