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

升级Jest至28后React库测试报错:helperSkipTransparentExpressionWrappers相关函数异常

Jest 27升级至28后测试报错:helperSkipTransparentExpressionWrappers.skipTransparentExprWrapperNodes is not a function

问题现象

将Jest从27版本升级到28后,React库的所有测试均无法运行,抛出错误:

helperSkipTransparentExpressionWrappers.skipTransparentExprWrapperNodes is not a function

报错路径指向node_modules/@babel/preset-env/node_modules/@babel/plugin-proposal-optional-chaining/src/transform.ts。

问题根源

核心原因是Babel相关依赖版本不匹配:

  • 本地直接安装的@babel/plugin-proposal-optional-chaining为7.21.0版本,它依赖的@babel/helper-skip-transparent-expression-wrappers@7.20.0确实导出了skipTransparentExprWrapperNodes方法;
  • 但@babel/preset-env@7.20.2的嵌套依赖中,自带的@babel/plugin-proposal-optional-chaining是7.18.9版本,这个旧版本插件尚未引入该helper方法,或调用逻辑与当前helper版本不兼容,导致调用时出现“不是函数”的错误。

解决方案

1. 统一Babel预设与插件版本

将@babel/preset-env升级到与@babel/plugin-proposal-optional-chaining匹配的版本(建议7.21.0及以上),让预设依赖的插件版本同步更新,避免嵌套旧版本插件冲突:

# npm
npm install @babel/preset-env@^7.21.0 --save-dev

# yarn
yarn add @babel/preset-env@^7.21.0 --dev

2. 清理依赖重新安装

删除node_modules目录和锁文件,重新安装依赖确保依赖树完全同步:

# 删除依赖目录和锁文件
rm -rf node_modules package-lock.json

# 重新安装
npm install

3. 强制指定插件版本(可选)

如果无法直接升级@babel/preset-env,可通过包管理器的版本强制覆盖功能,让@babel/preset-env使用最新插件版本:

  • npm:在package.json中添加overrides字段:
    "overrides": {
      "@babel/preset-env": {
        "@babel/plugin-proposal-optional-chaining": "^7.21.0"
      }
    }
    
  • yarn:在package.json中添加resolutions字段:
    "resolutions": {
      "@babel/preset-env/@babel/plugin-proposal-optional-chaining": "^7.21.0"
    }
    

添加后重新安装依赖即可生效。

4. 检查Jest的Babel配置

确保Jest配置文件(如jest.config.js)中指定的Babel预设和插件,优先使用项目根目录下安装的最新版本,避免加载嵌套的旧依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:57:47