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

Mocha+ES6测试报错:扩展运算符(...)出现Unexpected token问题求助

解决Mocha测试中对象扩展运算符的SyntaxError问题

你遇到的核心问题是Mocha运行测试时没有转译ES6+的对象扩展运算符语法——项目运行环境已经配置好转译所以正常工作,但测试环节的转译配置没跟上,导致低版本Node或者未转译的测试代码触发了语法错误。下面是具体的排查和解决步骤:

问题根源

对象扩展运算符({ ...obj })在Node.js 8.3.0及以上版本才原生支持。如果你的测试环境Node版本低于这个阈值,或者Mocha没有通过Babel转译测试代码,就会抛出SyntaxError: Unexpected token ...。

解决方案

1. 先检查Node.js版本

先在终端运行以下命令确认当前Node版本:

node -v

如果版本低于v8.3.0,最简单的解决方式是升级Node.js到LTS版本(比如16.x或18.x),原生支持扩展运算符后就不需要额外转译了。

2. 配置Mocha使用Babel转译(如果不想升级Node)

如果必须保留当前Node版本,按以下步骤配置Babel让Mocha转译测试代码:

安装必要依赖

在项目根目录运行:

npm install --save-dev @babel/core @babel/preset-env @babel/register mocha

创建/修改Babel配置文件

在项目根目录新建或编辑.babelrc文件,添加如下内容:

{
  "presets": [
    ["@babel/preset-env", {
      "targets": {
        "node": "current" // 适配当前运行的Node版本
      }
    }]
  ]
}

修改package.json的测试脚本

让Mocha在运行时加载@babel/register来转译测试代码:

{
  "scripts": {
    "test": "mocha --require @babel/register test/**/*.test.js"
  }
}

3. 适配NYC代码覆盖率工具

如果你同时在用NYC,需要额外配置让它支持Babel转译,否则覆盖率统计会不准确:

安装babel-plugin-istanbul

npm install --save-dev babel-plugin-istanbul

更新.babelrc添加插件

{
  "presets": [
    ["@babel/preset-env", {
      "targets": {
        "node": "current"
      }
    }]
  ],
  "plugins": ["istanbul"]
}

修改测试脚本用NYC运行

{
  "scripts": {
    "test": "nyc mocha --require @babel/register test/**/*.test.js"
  }
}

4. 检查Mocha配置冲突

如果你有.mocharc.js或其他Mocha配置文件,确保里面没有覆盖require选项——比如不要设置--no-require之类的参数,保证@babel/register能正常加载。

完成以上步骤后,重新运行npm test,应该就能解决这个语法错误了。

内容的提问来源于stack exchange,提问作者Vladimir Mukovozov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:33:54