React Native Jest测试报错:__fbBatchedBridgeConfig未设置
Jest测试报错:Invariant Violation: __fbBatchedBridgeConfig is not set, cannot invoke native modules
这个错误的核心原因是Jest运行在Node.js环境中,无法直接调用React Native的原生模块,而react-native-config依赖原生桥接层读取环境变量,导致测试时触发报错。以下是针对性的解决方案:
1. Mock react-native-config模块
直接在测试环境中模拟该模块的行为,绕过原生调用:
- 在项目根目录创建
__mocks__/react-native-config.js文件,模拟项目中用到的环境变量:
export default { // 替换为你实际使用的环境变量键值对 API_BASE_URL: 'https://mock-api.example.com', APP_ENV: 'test', };
- 修改
jest.config.js,添加模块映射:
module.exports = { // 保留现有配置,新增或修改以下内容 moduleNameMapper: { '^react-native-config$': '<rootDir>/__mocks__/react-native-config.js', // 其他已有的模块映射... }, preset: 'react-native', // 确保使用React Native的Jest预设 };
2. 调整Babel配置,测试环境禁用原生插件
如果项目使用babel-plugin-react-native-config,需要在测试环境中跳过该插件:
修改babel.config.js:
module.exports = { presets: ['module:metro-react-native-babel-preset'], plugins: [ // 其他插件保留,仅在非测试环境加载react-native-config插件 process.env.NODE_ENV !== 'test' && [ 'module:react-native-config', { envFile: '.env' } ] ].filter(Boolean), // 过滤掉测试环境下的false值 };
3. 确保Jest加载React Native的基础配置
检查jest.config.js中的setupFiles,确保已加载React Native的Jest初始化文件:
module.exports = { // 其他配置... setupFiles: [ './node_modules/react-native/jest/setup.js', // 你的其他测试初始化文件... ], };
4. 检查依赖版本兼容性
确认package.json中以下依赖版本与你的React Native版本匹配:
jest@testing-library/react-nativejest-react-native
若存在版本冲突,尝试重新安装依赖:
rm -rf node_modules package-lock.json yarn.lock npm install
内容的提问来源于stack exchange,提问作者Hardik3296
相关产品推荐
相关产品推荐

