【问题标题】:Is it possible to require the original/actual implementation of a mocked Jest module from within the mocked module itself?是否可以从模拟模块本身中要求模拟 Jest 模块的原始/实际实现?
【发布时间】:2021-02-17 07:07:12
【问题描述】:

我的应用程序设置为在我的 Jest 配置中,我有一个像这样的模块名称映射:

// jest.config.js
moduleNameMapper: {
  'utils': '<rootDir>/__mocks__/utilMock.js',
},

如果在这个模拟中,我想通过一些原始实现,理论上我应该能够做到这一点:

// ./__mocks__/utilMock.js

const actualUtils = jest.requireActual('/utils');

module.exports = {
  actualUtils.funcA,
  actualUtils.funcB,
  funcC: jest.fn(),
  funcD: jest.fn(),
};

但是,当我实际尝试对此进行测试时,requireActual 并没有将原始实现返回给我,因此我所有的测试都打破了 funcAfuncB 不是函数的想法。

这真的可以做到吗,或者utils 模块在通过 Jest 配置全局设置时无论您做什么都会被模拟出来?

【问题讨论】:

  • 你的路径正确吗?如果你把它改成jest.requireActual('../utils');
  • 啊,这并没有很好地延续到示例中,但是我对所有导入都使用绝对/完整路径,所以它们绝对是正确的,是的

标签: javascript unit-testing jestjs


【解决方案1】:

事实证明,当您使用模块映射时这是不可能的,但如果您使用自动模拟,它工作。因此,不要在jest.config.jsmoduleNameMapper 中指定模拟文件,而是确保启用自动模拟,然后在__mocks__ 下有一个与您尝试模拟的文件具有相同名称和路径的文件(或否则别名)目录。

您导入/需要的任何内容都应该引用原始实现!

【讨论】:

    猜你喜欢
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 2021-02-04
    • 2017-02-23
    • 2018-06-21
    相关资源
    最近更新 更多