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

运行React Native测试套件时找不到metro-react-native-babel-preset预设

解决 "Couldn't find preset 'module:metro-react-native-babel-preset'" 测试错误

这个问题本质是ts-jest和React Native Jest预设的Babel配置冲突导致的——你在ts-jest里开启了useBabelrc: true,但module:metro-react-native-babel-preset是Metro打包器专属的预设路径写法,Jest依赖的旧版Babel核心无法识别这种特殊路径。下面给你三个针对性的解决思路:

方案1:让ts-jest跳过自定义Babelrc,直接使用RN预设

修改你package.json里的Jest配置,把ts-jest的useBabelrc设为false,并指定react-native作为测试用的Babel预设:

"jest": {
  "preset": "react-native",
  "moduleFileExtensions": [
    "ts",
    "tsx",
    "js",
    "jsx",
    "json"
  ],
  "transform": {
    "^.+\\.(js)$": "<rootDir>/node_modules/react-native/jest/preprocessor.js",
    "\\.(ts|tsx)?$": "ts-jest"
  },
  "testRegex": "/src/.*\\.spec\\.(js|ts|tsx)?$",
  "globals": {
    "ts-jest": {
      "useBabelrc": false,
      "babelConfig": {
        "presets": ["react-native"]
      }
    }
  }
}

这样ts-jest就会忽略你的.babelrc,直接用React Native官方适配Jest的预设,避免路径识别问题。

方案2:给Babelrc添加测试环境专属配置(保留自定义插件)

如果你需要保留.babelrc里的module-resolver等插件,可以给Babel添加环境判断,让测试时自动切换为Jest能识别的预设:
修改你的.babelrc:

{
  "presets": ["module:metro-react-native-babel-preset"],
  "plugins": [
    [
      "module-resolver",
      {
        "alias": {
          "~": "./src"
        }
      }
    ]
  ],
  "env": {
    "test": {
      "presets": ["react-native"]
    }
  }
}

同时保持package.json里ts-jest的useBabelrc: true不变——测试时Babel会自动加载test环境的配置,用react-native预设替代Metro的特殊路径预设。

方案3:确保依赖完整(兜底检查)

虽然大概率不是这个原因,但可以确认一下metro-react-native-babel-preset是否已安装:

# npm
npm install metro-react-native-babel-preset --save-dev
# yarn
yarn add metro-react-native-babel-preset --dev

不过如果你的RN项目开发环境能正常运行,这个依赖应该已经存在,主要还是前两个方案能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:56:09