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

React Typescript项目Jest遇到意外token错误该如何修复?

问题根因

当前配置存在两个核心冲突:

  • Babel 7 与 Babel 6 的扩展运算符处理插件混用:依赖中同时安装了 Babel 7 版的@babel/plugin-proposal-object-rest-spread和 Babel 6 版的babel-plugin-transform-object-rest-spread,且 Babel 配置中使用的是已废弃的 Babel 6 版插件名transform-object-rest-spread,导致转译规则不生效
  • Jest 运行时未正确触发 Babel 转译:当前 Jest 配置未指定转译器,测试运行时直接读取源码,未经过扩展运算符的语法转换

具体修复方案

第一步:清理冲突依赖,统一使用 Babel 7 生态插件

卸载废弃的 Babel 6 插件:

npm uninstall babel-plugin-transform-object-rest-spread babel-plugin-transform-class-properties @babel/preset-es2015 babel-preset-es2015

@babel/preset-env 已经内置了对象扩展运算符的转译支持,不需要单独安装额外插件。

第二步:修正 Babel 配置

更新 Babel 配置文件内容如下:

{
  "presets": ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript"],
  "plugins": [
    ["@babel/plugin-proposal-decorators", { "legacy": true }],
    ["@babel/plugin-proposal-class-properties", { "loose": true }]
  ]
}

移除原配置中的transform-object-rest-spread插件配置,由@babel/preset-env默认处理扩展运算符转译。

第三步:补充 Jest 转译配置

在 Jest 配置中添加transform字段,指定用 babel-jest 转译源码:

"jest": {
  "verbose": true,
  "collectCoverage": true,
  "runner": "@jest-runner/electron",
  "testEnvironment": "@jest-runner/electron/environment",
  "transform": {
    "^.+\\.(js|jsx|ts|tsx)$": "babel-jest"
  },
  "moduleNameMapper": {
    "\\.(jpg|jpeg|png|gif|svg|yaml)$": "<rootDir>/__mocks__/fileMock.js",
    "\\.(css|less|scss)$": "<rootDir>/__mocks__/styleMock.js"
  },
  "modulePaths": [
    "<rootDir>/src/",
    "node_modules"
  ]
}

如果没有安装babel-jest,先执行安装:

npm install babel-jest@^26.0.0 --save-dev

安装的版本需要和本地 Jest 的大版本保持一致,避免兼容性问题。

第四步:验证修复

删除node_modules和锁文件(package-lock.json/yarn.lock)后重新安装依赖,再运行 Jest 测试即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 22:57:04