使用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的场景:
- 安装对应语法转译插件:
npm install @babel/plugin-proposal-logical-assignment-operators -D- 在项目根目录
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
相关产品推荐
相关产品推荐

