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格式
- 将
mochaHooks.mjs重命名为mochaHooks.cjs,保持原有CommonJS语法不变:
exports.mochaHooks = { beforeAll(done) { // initialization code here done(); } };
- 更新
.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
相关产品推荐
相关产品推荐

