Jest使用嵌套文件模拟node_modules

时间:2016-11-10 16:24:48

标签: unit-testing mocking jestjs

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

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

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

2 个答案:

答案 0 :(得分:4)

似乎jest不支持mocking scoped包(更多信息here)。所以你有两个选择。

<强> 1。定义您的模拟内联

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

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

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

答案 1 :(得分:0)

在Alex的回答的帮助下,我成功了:

  1. 在我的测试套件顶部设置模拟
  2. jest.setMock('@exponent/ex-navigation', require('__mocks__/db'));

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

      module.exports = myMockedObject;

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

      • 无需更改开局设置;
      • 启用“Orta.vscode-jest”扩展,仍然可以在Visual Studio代码编辑器中正确运行测试。