Expo React Native运行Jest报testEnvironmentOptions未定义错误
报错根因
错误由Jest生态依赖跨大版本混装导致API不兼容触发:
- 项目中
jest主包版本为26.6.3,单独安装的jest-config版本为28.1.0,而jest-expo@45.0.1依赖的是27.x版本的Jest全链路包。三个大版本的Jest依赖内部API存在破坏性变更、互不兼容,导致测试环境初始化时传入的配置对象缺失字段,读取testEnvironmentOptions时抛出类型错误。
修复方案
按以下步骤操作即可解决问题:
- 卸载存在版本冲突的依赖
执行以下命令移除版本不匹配的包:
npm uninstall jest jest-config @types/jest
单独安装jest-config没有必要,jest主包和jest-expo preset已经内置对应版本的配置能力,跨版本引入该包是本次报错的直接诱因
- 安装和Expo SDK 45版本对齐的Jest依赖
Expo SDK 45 适配的Jest主版本为27.x,执行命令安装对应版本的依赖:
npm install --save-dev jest@^27.5.1 @types/jest@^27.5.2 ts-jest@^27.1.5
- 调整jest.config.js配置
移除从独立jest-config包引入defaults的逻辑,直接声明配置项,修改后的配置内容如下:
module.exports = { preset: 'jest-expo', transformIgnorePatterns: [ 'node_modules/(?!((jest-)?react-native|@react-native(-community)?)|expo(nent)?|@expo(nent)?/.*|@expo-google-fonts/.*|react-navigation|@react-navigation/.*|@unimodules/.*|unimodules|sentry-expo|native-base|react-native-svg)', ], moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], setupFiles: ['<rootDir>/jest/setup.js'], setupFilesAfterEnv: ['@testing-library/jest-native/extend-expect', 'core-js'], testPathIgnorePatterns: [ '<rootDir>/.expo/', '<rootDir>/node_modules/', '<rootDir>/web-build/', ], }
- 清除缓存后重新执行测试
依次执行以下命令清理Jest缓存并运行测试:
npx jest --clearCache npm run test
修复后快照测试可正常执行通过,不会再出现该类型错误。
内容的提问来源于stack exchange,提问作者Sumit Surana
相关产品推荐
相关产品推荐

