jest-haste-map:Haste模块命名冲突

时间:2019-11-25 17:34:45

标签: javascript reactjs react-native jestjs

在我们的项目中,我们将react-native安装在两个工作区中(用于测试目的的根文件夹和库文件夹)。 尝试测试应用程序(根文件夹)时,这将引发典型错误“ jest-haste-map:Haste模块命名冲突”。

项目结构:

.(rootProject)
+-- my-package
|   +-- package.json (workspace(*))
+-- package.json(workspace(*))

* has react-native as dependency

我可以为手机进行编译,并提供以下配置:

// metro.config.js
blacklistRE: blacklist([
   new RegExp(
     `^${path.resolve(__dirname, 'my-package/node_modules')}/.*$`,
   ),
]),

开玩笑,我尝试了以下操作,但未成功:

// jest.config.js
modulePathIgnorePatterns: [
  '<rootDir>/my-package/node_modules/react-native',
]

jest.config是否有任何类似的配置?

编辑:

根项目(rootProject)的无效配置(无效的配置):

module.exports = {
  roots: ['<rootDir>', '<rootDir>/my-package/__mocks__'],
  preset: 'react-native',
  snapshotSerializers: ['enzyme-to-json/serializer'],
  moduleNameMapper: {
    '\\.(jpg|jpeg|png|gif|svg)$':
      '<rootDir>my-package/__mocks__/fileMock.js',
  },
  setupFiles: ['./jest.setup.js'],
  testMatch: ['<rootDir>/src/**/*.spec.js'],
  transformIgnorePatterns: [
    'node_modules/(?!@asseco|@react-|react-|victory|rn-placeholder|redux-persist).+\\.js$',
  ],
  coveragePathIgnorePatterns: [
    '<rootDir>/node_modules',
    '<rootDir>/my-package',
  ],
  modulePathIgnorePatterns: [
    '<rootDir>/my-package/node_modules/react-native',
  ]
  coverageThreshold: {
    global: {
      branches: 80,
      functions: 80,
      lines: 80,
      statements: 80,
    },
  },
  testResultsProcessor: '<rootDir>/node_modules/jest-html-reporter',
  coverageDirectory: '<rootDir>/reporters/coverage',
}

注意:

my-package是一个git子模块,可以单独测试,也可以与rootProject集成(具有自己的笑话配置)

1 个答案:

答案 0 :(得分:1)

如果每个程序包都具有本机依赖关系,则最终会有两个副本,这可能会引起开玩笑的问题。而是将其作为依赖项保留在根项目中,而是将其移动到子模块中的peerDependencies(以及第二个副本到devDependencies中,以便能够对其进行独立测试)。

您是否使用yalc在本地集成子模块?通过从根项目中删除.yalc文件夹,可以解决此错误。