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

Mocha配置文件中extension与spec选项的关联关系是什么?

Mocha中extension与spec配置的关联解析

先看你给出的配置示例:

module.exports = {
  extension: ['js', 'cjs', 'mjs'],
  spec: ['test/**/*.spec.js'],
};

关于extension选项的作用

  • 单独使用时:Mocha会默认在test目录(默认不递归子目录,需加--recursive才会遍历子目录)下,查找所有后缀匹配extension列表的文件,比如.js、.cjs、.mjs格式的文件都会被作为测试文件加载。
  • 它还有一个辅助作用:当你指定的文件路径/模式省略后缀时,Mocha会自动尝试用extension里的后缀去补全查找,比如你写spec: ['test/**/*.spec'],Mocha会自动找*.spec.js、*.spec.cjs、*.spec.mjs这些文件。

为什么和spec搭配时mjs扩展名没生效?

spec是用来指定精准的文件匹配模式,它的优先级高于extension的默认查找逻辑。两者搭配时的执行顺序是:

  1. Mocha先按照spec里的模式,找出所有符合的文件——你的配置里spec是test/**/*.spec.js,这就限定了只会找后缀为.js的*.spec.js文件,根本不会触及.spec.mjs或.spec.cjs的文件。
  2. 之后Mocha才会用extension列表作为过滤条件,从第一步找到的文件里再筛选出后缀匹配的。但第一步已经只有.js文件了,所以mjs和cjs的配置自然不会有效果。

如果想要匹配多种后缀的spec文件,你需要修改spec的模式,比如写成:

spec: ['test/**/*.spec.{js,cjs,mjs}']

这样Mocha会先找到所有这三种后缀的spec文件,再结合extension的过滤(此时extension可以进一步限制允许的后缀,比如如果extension去掉cjs,那.spec.cjs的文件会被排除)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:05:22