升级React Native至0.71.3后Jest测试报错:遇到意外令牌
解决Expo SDK 48升级后Jest测试"意外令牌"报错方案
1. 同步核心依赖版本
你的jest-expo仍停留在47.0.0版本,必须与Expo SDK 48保持版本一致;同时react-test-renderer版本需和项目中react的18.2.0版本匹配,这是导致版本冲突的核心原因之一。
执行命令更新依赖:
npm install jest-expo@48.0.0 react-test-renderer@18.2.0 --save-dev
2. 调整Babel配置适配RN 0.71+
React Native 0.71对Babel转译规则有更新,修改babel.config.js如下:
先安装必要插件:
npm install @babel/preset-env --save-dev
更新配置文件:
module.exports = function(api) { api.cache(true); return { presets: [ 'babel-preset-expo', ['@babel/preset-env', { targets: { node: 'current' } }] ], env: { test: { presets: [ ['babel-preset-expo', { modules: 'commonjs' }], ['@babel/preset-env', { targets: { node: 'current' } }] ], plugins: ['@babel/plugin-transform-modules-commonjs'] } } }; };
3. 优化Jest转译规则
修改package.json中的Jest配置,添加transformIgnorePatterns确保第三方依赖被正确转译:
"jest": { "preset": "jest-expo", "setupFiles": ["./jest-setup.js"], "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-paper))" ] }
4. 清理缓存重新测试
执行以下命令清除缓存并重装依赖:
npx jest --clearCache rm -rf node_modules package-lock.json npm install npm run test
若仍有报错,查看具体报错文件路径,将对应第三方库添加到transformIgnorePatterns的排除列表中,确保Jest会对其进行转译。
内容的提问来源于stack exchange,提问作者koch10
相关产品推荐
相关产品推荐

