在我们的项目中,我们在两个工作区(根文件夹和用于测试目的的库文件夹(中安装了 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 集成(有自己的玩笑配置(
如果你的每个包都有一个反应原生依赖项,你最终会得到两个副本,这可能会导致开玩笑的问题。相反,保留为根项目中的依赖项,但将其移动到子模块中的peerDependencies
(以及第二个副本以devDependencies
以便能够单独测试它(。
您是否使用 yalc 在本地集成您的子模块?这对我来说是导致相同错误的原因,通过从根项目中删除.yalc
文件夹来解决。