【问题标题】:Jest Mocking node_modules With Nested File用嵌套文件开玩笑地模拟 node_modules
【发布时间】:2016-11-10 16:24:48
【问题描述】:

我正在尝试模拟嵌套在子目录中的第 3 方库(在 node_modules 中)。 我在__mocks__/@exponent/ex-navigation 中创建了模拟。它位于我的 node_modules 目录旁边的顶层。

我通过jest.mock('@exponent/ex-navigation'); 在我的测试文件中设置了模拟。

由于某种原因,我无法让它使用模拟文件。我认为这与@exponent 子目录有关。如果我将其更改为 fs 之类的简单内容,它就可以工作。

【问题讨论】:

  • 我遇到了完全相同的问题,您解决了吗?
  • 奇怪的是,Jest 目前不支持此功能。在此处显示您对此功能请求的支持:github.com/facebook/jest/issues/462

标签: unit-testing mocking jestjs


【解决方案1】:

看来 jest 不支持模拟作用域包(更多信息here)。所以你有两个选择。

1.定义你的模拟内联

jest.mock('@exponent/ex-navigation', () => {
  return {
    // mocked exports
  };
});

2。在您的 jest 配置中手动映射模拟位置

{
  ...
  "moduleNameMapper": [
    "@exponent/ex-navigation": "<rootDir>/__mocks__/@exponent/ex-navigation"
    ...
  ]
}

【讨论】:

  • 出于某种原因,我只需要将模拟的导出分配给第 1 步的 module.export。=> 不必使用 jest.mock()
【解决方案2】:

在亚历克斯的回答的帮助下,我成功了:

  1. 在我的测试套件顶部设置模拟

jest.setMock('@exponent/ex-navigation', require('__mocks__/db'));

  1. 让模拟文件通过module.exports 导出其模拟对象

module.exports = myMockedObject;

以这种方式设置模拟具有以下好处:

  • 不必更改笑话设置;
  • 启用“Orta.vscode-jest”扩展仍然能够在 Visual Studio Code 编辑器中正确运行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 2017-07-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 2021-11-20
    • 2021-07-03
    • 2019-03-23
    相关资源
    最近更新 更多