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

为什么我的NYC代码覆盖率工具在ESM环境下无法正常工作?

覆盖率统计为0的原因及解决方法
  • ESModule 兼容问题
    你在项目中配置了"type": "module"使用ESModule规范,而旧版本的nyc默认仅支持CommonJS模块的代码插桩,你使用的--require esm参数无法让nyc正确识别ESM模块的执行逻辑,插桩失败后自然统计不到代码覆盖率。
    解决方法:
  1. 升级nyc到最新版本,在package.json中新增nyc配置:
{
  "nyc": {
    "extensions": [".mjs"],
    "include": ["**/*.mjs"],
    "exclude": ["**/*.spec.mjs"]
  }
}
  1. 修改测试命令为:
    "test": "NODE_OPTIONS=--experimental-vm-modules nyc mocha --recursive './**/*.spec.mjs'"
    如果配置后仍不生效,建议直接替换为c8工具,它基于Node.js原生V8覆盖率能力,对ESM兼容性更好,仅需要安装c8依赖后将命令中的nyc替换为c8即可。
  • 路径匹配错误
    你当前测试命令指定的测试文件路径为./lib/**/*.spec.mjs,如果你的测试文件、源码文件没有存放在lib目录下,nyc默认不会主动扫描lib目录外的源码文件,导致没有统计到App.mjs的执行数据。
    解决方法:
    确认项目文件存放结构,将测试命令的路径匹配规则修改为你实际存放测试文件的路径,同时在nyc的配置中明确指定include字段覆盖你的源码存放路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:54:04