Jenkins pipeline执行测试用例时报Jest encountered an unexpected token错误
问题排查与解决方法
核心报错原因
报错触发点是pretty-format包中} catch {语法的识别失败,该写法属于ES2019推出的可选catch绑定特性,低于10.0版本的Node.js原生不支持该语法。本地运行正常是因为你本地Node版本≥10,而Jenkins构建环境的Node版本更低,才会出现环境差异问题。
排查步骤
- 第一步:在Jenkins pipeline的测试执行步骤前添加
node -v、npm -v命令,打印Jenkins agent的Node.js版本,确认和本地开发环境的Node版本是否一致。 - 第二步:确认Jenkins构建流程是否使用了和本地一致的
package-lock.json/yarn.lock文件执行依赖安装,避免两侧安装的pretty-format版本不一致。
解决方案
方案1:升级Jenkins Node.js版本(最推荐)
将Jenkins agent的Node.js版本升级到10.x及以上的长期支持版本,和本地开发环境版本保持一致,从底层兼容新语法。
方案2:修改Jest配置适配低版本Node
如果暂时无法升级Jenkins Node版本,可以修改Jest配置(jest.config.js或者package.json的jest字段),将pretty-format加入Babel转译名单:
module.exports = { // 保留原有其他配置 transformIgnorePatterns: [ "node_modules/(?!(pretty-format)/)" ] }
该配置会让Babel转译node_modules目录下的pretty-format包,把高版本语法转换为低版本Node可识别的语法。
方案3:锁定兼容版本的pretty-format
如果前两个方案都不适用,可以在package.json中强制指定兼容低版本Node的pretty-format版本:
{ "resolutions": { "pretty-format": "24.9.0" } }
24.9.0版本的pretty-format未使用可选catch绑定语法,不会触发该报错。如果使用npm作为包管理工具,可以安装npm-force-resolutions包实现强制版本锁定。
内容的提问来源于stack exchange,提问作者Vaibhav Kumar Ambeshta
相关产品推荐
相关产品推荐

