You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native使用Jest测试时因ErrorHandler类型报错崩溃

解决Jest运行React Native测试时的SyntaxError: Unexpected identifier 'ErrorHandler'问题

问题根源

报错文件@react-native/polyfills/error-guard.js中使用了TypeScript类型定义语法,但当前Jest配置未将@react-native这个scope包加入转译白名单,导致Jest跳过了对该文件的Babel转译,直接执行未转译的TS代码,从而无法识别type关键字引发报错。

解决方案

1. 修正Jest的transformIgnorePatterns配置

修改package.json中的jest配置,将@react-native加入不被忽略转译的列表:

"jest": {
  "preset": "react-native",
  "transformIgnorePatterns": [
    "node_modules/(?!((jest-)?react-native|@react-native))"
  ]
}

该正则会让Jest不对react-native、jest-react-native以及@react-native开头的包跳过转译,确保@react-native/polyfills下的文件能被Babel正常处理。

2. 确认Babel配置无需改动

你的babel.config.js使用module:metro-react-native-babel-preset预设是正确的,该预设已包含转译React Native代码和处理TS语法的能力,保持原样即可:

module.exports = {
  presets: ['module:metro-react-native-babel-preset'],
};

3. 清除Jest缓存后重新测试

先清除Jest缓存,避免旧编译文件干扰:

npx jest --clearCache

再重新运行测试:

npm test

额外排查项

若上述方案无效,可检查以下两点:

  • 确认你的React Native版本与Jest 29.2.1是否兼容,参考官方版本匹配说明。
  • 若项目有单独的TypeScript配置,确保@babel/preset-typescript已安装并加入Babel预设(metro预设通常已包含该能力,大概率无需额外操作)。

内容的提问来源于stack exchange,提问作者Olivier Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 12:05:57