升级React Native后Jest运行react-native-modalize相关测试报错如何解决?
报错原因
该错误是升级React Native版本后,Jest运行环境的模拟值和react-native-modalize@2.0.8的内部实现不匹配导致的:react-native-modalize的devices.js工具文件默认假设Android平台下React Native.Platform.Version是包含major/minor/patch属性的对象,但新版React Native在Jest默认模拟配置中,Android环境的Platform.Version直接返回数值类型的系统版本号(例如33),读取minor属性时自然触发undefined报错。
另外你当前Jest配置的transformIgnorePatterns仅豁免了react-native本身的转译,react-native-modalize的ES6代码没有被Babel转译也可能加剧该问题。
解决方案
不需要降级依赖,按以下步骤修改配置即可修复:
- 新增Jest初始化配置文件,例如在项目根目录新建
jest-setup.js,写入以下内容:
import { Platform } from 'react-native'; // 修复Platform.Version结构不匹配问题 if (Platform.OS === 'android') { Platform.Version = { major: 13, minor: 0, patch: 0 }; } // 可选:如果不需要测试Modalize的内部逻辑,可直接模拟整个组件,性能更高 jest.mock('react-native-modalize', () => { const React = require('react'); return { Modalize: jest.fn(({ children }) => React.createElement('View', null, children)) }; });
- 修改package.json中的Jest配置,新增初始化文件引用、更新转译豁免规则:
"jest": { // 其余原有配置保持不变 "setupFiles": [ "./node_modules/react-native-gesture-handler/jestSetup.js", "<rootDir>/jest-setup.js" ], "transformIgnorePatterns": [ "/node_modules/(?!(react-native|react-native-modalize)/).+" ] }
配置修改完成后重新运行测试即可。
内容的提问来源于stack exchange,提问作者AsZik
相关产品推荐
相关产品推荐

