在我们的项目中,我们将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集成(具有自己的笑话配置)
答案 0 :(得分:1)
如果每个程序包都具有本机依赖关系,则最终会有两个副本,这可能会引起开玩笑的问题。而是将其作为依赖项保留在根项目中,而是将其移动到子模块中的peerDependencies
(以及第二个副本到devDependencies
中,以便能够对其进行独立测试)。
您是否使用yalc在本地集成子模块?通过从根项目中删除.yalc
文件夹,可以解决此错误。