Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing Jest模拟节点\具有嵌套文件的模块_Unit Testing_Mocking_Jestjs - Fatal编程技术网

Unit testing Jest模拟节点\具有嵌套文件的模块

Unit testing Jest模拟节点\具有嵌套文件的模块,unit-testing,mocking,jestjs,Unit Testing,Mocking,Jestjs,我试图模拟嵌套在子目录中的第三方库(在节点_模块中)。 我已经在\uuuuu mocks\uuuu/@exponent/ex navigation中创建了模拟。它位于我的node_modules dir旁边的顶层 我通过jest.mock('@exponent/ex-navigation')在测试文件中设置mock 由于某种原因,我无法让它使用模拟文件。我认为这与@exponent子目录有关。如果我将其更改为类似于fs的简单方式,它就会工作。jest似乎不支持模拟作用域包(更多信息)。所以你有两

我试图模拟嵌套在子目录中的第三方库(在节点_模块中)。 我已经在
\uuuuu mocks\uuuu/@exponent/ex navigation
中创建了模拟。它位于我的node_modules dir旁边的顶层

我通过
jest.mock('@exponent/ex-navigation')在测试文件中设置mock


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

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

1。定义您的模拟内联

jest.mock('@exponent/ex-navigation', () => {
  return {
    // mocked exports
  };
});
2。在jest配置中手动映射模拟位置

{
  ...
  "moduleNameMapper": [
    "@exponent/ex-navigation": "<rootDir>/__mocks__/@exponent/ex-navigation"
    ...
  ]
}
{
...
“moduleNameMapper”:[
“@exponent/ex-navigation”:“/\uuuuuu mocks\uuuuuu/@exponent/ex-navigation”
...
]
}

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

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

  • 让模拟文件通过
    模块导出其模拟对象。导出
  • module.exports=myMockedObject

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

    • 不必更改笑话设置
    • 启用“Orta.vscode jest”扩展,以便仍然能够在VisualStudio代码编辑器中正确运行测试

    我看到了完全相同的问题,你解决过这个问题吗?奇怪的是,Jest目前不支持这个问题。在此显示您对该功能请求的支持:出于某种原因,我不得不将模拟的导出分配给步骤1的
    模块。导出
    。=>不必使用
    jest.mock()