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

Mocha CLI用--file指定mochaHooks正常,.mocharc.json中file属性报错

解决Mocha配置文件中全局钩子文件的exports is not defined错误

问题原因

当切换到.mocharc.json配置并指定loader: "ts-node/esm"时,Mocha会用ES模块加载器处理所有文件,包括你指定的全局钩子文件mochaHooks.mjs。而Node.js规定.mjs后缀的文件默认作为ES模块加载,ES模块环境中不存在CommonJS的exports对象,因此抛出ReferenceError。

之前命令行运行正常,是因为--file参数在--loader之前指定,Mocha加载钩子文件时还未启用ES模块加载器,所以该文件被当作CommonJS模块处理,exports语法能正常工作。

解决方案

方案1:将钩子文件改为ES模块语法

修改mochaHooks.mjs的代码,用ES模块的export替代CommonJS的exports:

export const mochaHooks = {
  beforeAll(done) {
    // initialization code here
    done();
  }
};

方案2:修改钩子文件后缀为CommonJS格式

  1. 将mochaHooks.mjs重命名为mochaHooks.cjs,保持原有CommonJS语法不变:
exports.mochaHooks = {
  beforeAll(done) {
    // initialization code here
    done();
  }
};
  1. 更新.mocharc.json中的file路径:
{
  "extension": ["js","cjs","mjs","ts"],
  "package": "./package.json",
  "file": ["src/tests/mochaHooks.cjs"],
  "loader": "ts-node/esm"
}

两种方案任选其一,都能解决ES模块环境下exports未定义的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:30:02