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

如何在Istanbul nyc覆盖率报告中正确排除指定文件

问题根因

你的nyc排除规则不生效,核心是三个问题:

  • 你混用了两套独立的代码插桩流程:既手动执行了nyc instrument做预插桩,又在启动脚本里引入了@cypress/instrument-cra做运行时插桩。nyc的exclude规则仅在插桩执行阶段生效,你写的配置没有被实际执行插桩的程序加载。
  • 路径配置不匹配:你配置里的临时目录、报告目录带app/前缀,如果执行命令的项目根目录下没有app层级,通配符匹配路径时会因为前缀不符无法命中目标文件。
  • @cypress/instrument-cra默认不会自动读取项目根目录下的.nycrc或package.json中的nyc配置项,你写在这两个位置的排除规则对运行时插桩流程完全无效。
修复步骤

按以下顺序操作即可解决问题:

  1. 清理旧的插桩产物和缓存,执行以下命令:
rm -rf ./coverage ./app/test/coverage ./app/test/.nyc_output ./node_modules/.cache
  1. 二选一确定插桩方案,不要混用:
    • 方案一(推荐,适配Cypress官方流程):保留@cypress/instrument-cra的启动参数,删掉你手动执行nyc instrument的步骤,不要提前做预插桩。把nyc配置挪到Cypress的插件配置中,让code-coverage插件直接加载规则:
      // cypress/plugins/index.js
      module.exports = (on, config) => {
        require('@cypress/code-coverage/task')(on, config)
        config.env.nyc = {
          reporter: ["lcov", "text-summary"],
          sourceMap: true,
          "temp-dir": "test/.nyc_output",
          "report-dir": "test/coverage",
          all: true,
          exclude: ["**/AddressFormatter.js"],
          "check-coverage": true
        }
        return config
      }
      
      注意把配置里多余的app/路径前缀删掉,路径匹配以你执行yarn start命令的目录为根目录。
    • 方案二(原生nyc插桩):把package.json里start脚本的-r @cypress/instrument-cra参数删掉,恢复成原生的"start": "react-scripts start"。后续执行插桩时显式指定配置文件,命令如下:
      nyc instrument --config .nycrc.json ./src ./coverage
      
      同样需要把.nycrc.json里的temp-dir、report-dir的app/前缀删掉,避免路径匹配失败。
  2. 重新启动项目、执行Cypress用例,新生成的覆盖率报告就会自动排除指定的AddressFormatter.js文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:24:28