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

使用Jest测试时??=运算符报Unexpected token语法错误如何解决

Jest测试报??=语法错误解决方案

问题现象

执行Jest测试时抛出如下语法错误:

r[i] ??= [];
           
     ^^^

SyntaxError: Unexpected token '??='

错误根因

??=是ES2021规范新增的逻辑空赋值运算符,报错本质是当前Jest运行时的语法解析器无法识别该语法,常见触发场景:

  • 运行环境Node.js版本低于15.0.0,该版本前Node未原生支持??=语法
  • Jest配套的转译工具(babel-jest/ts-jest)未配置ES2021及以上语法的转译规则
  • 引用的第三方npm包直接输出了含??=的ES2021+代码,而Jest默认跳过node_modules目录下的文件转译

修复方案

按以下顺序逐一排查修复:

1. 升级Node.js版本

先执行node -v查看当前Node版本,若版本低于16.x(LTS长期支持版),直接升级Node到16.x及以上的LTS版本,重装依赖后重新执行测试,该方案可覆盖绝大多数场景的问题。

2. 调整转译工具配置

如果受环境限制无法升级Node,对应调整转译配置即可:

  • 使用babel-jest的场景:
    1. 安装对应语法转译插件:
    npm install @babel/plugin-proposal-logical-assignment-operators -D
    
    1. 在项目根目录babel.config.js中添加配置,确保解析器支持该语法:
    module.exports = {
      presets: [['@babel/preset-env', { targets: { node: 'current' } }]],
      plugins: ['@babel/plugin-proposal-logical-assignment-operators']
    }
    
  • 使用ts-jest的场景:
    将项目tsconfig.json中的target字段值调整为ES2021或更高,同时确保ts-jest版本不低于27.0.0。

3. 配置node_modules文件转译规则

如果定位到报错来自node_modules下的第三方依赖,在jest.config.js中修改transformIgnorePatterns配置,指定Jest转译对应依赖:

module.exports = {
  // 其余原有Jest配置保持不变
  transformIgnorePatterns: [
    '/node_modules/(?!(报出错误的依赖包名)/)'
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:39:45