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

Cypress代码覆盖率仅检测support文件,未覆盖项目源码问题排查

Cypress代码覆盖率仅检测support文件,未覆盖src目录的解决方法

针对你遇到的问题——Cypress代码覆盖率报告仅显示cypress/support/e2e.js,未覆盖src目录文件,且window.__coverage__有输出但.nyc_output/out.json为空,可按以下步骤排查修复:

1. 确认Babel插桩是否正确作用于src文件

首先检查.babelrc的istanbul插件配置是否正确,确保它能处理src目录下的文件:

{
  "plugins": ["istanbul"]
}

同时要确认项目的构建工具(如Webpack/Vite)是否用Babel转译了src文件:

  • 若用Webpack:检查webpack配置中是否将Babel-loader应用于src下的.js文件,且加载器的选项包含istanbul插件。
  • 若用Vite:默认不使用Babel,需替换Cypress的预处理器为Vite适配版本,修改cypress.config.js:
    module.exports = defineConfig({
      e2e: {
        // ...其他配置
        setupNodeEvents(on, config) {
          require('@cypress/code-coverage/task')(on, config)
          // 替换为Vite预处理器
          on('file:preprocessor', require('@cypress/code-coverage/use-vite'))
          return config
        },
      }
    })
    

2. 验证window.__coverage__的内容

测试时在浏览器控制台打印window.__coverage__,查看其键值是否包含src目录下的文件路径(如src/api/tennis/player.js):

  • 如果没有:说明Babel未给这些文件插桩,需检查构建工具是否正确加载了Babel的istanbul插件,确保开发环境构建时启用了插桩逻辑。
  • 如果有但.nyc_output/out.json为空:可能是覆盖率数据收集环节出问题,尝试:
    • 确认@cypress/code-coverage版本与Cypress版本兼容(Cypress 12+建议使用最新版插件)。
    • 暂时移除cypress-multi-reporters配置,单独测试代码覆盖率功能,排除多报告器冲突的可能。

3. 检查nyc的包含/排除规则

若项目根目录有.nycrc或nyc.config.js,确保配置包含src目录:

{
  "include": ["src/**/*.js"],
  "exclude": ["node_modules/**", "cypress/**"]
}

如果没有自定义nyc配置,@cypress/code-coverage默认会包含src目录,但如果存在全局排除规则,需确认未误排除src文件。

4. 确保应用加载了插桩后的代码

运行Cypress测试前,需确保应用是用包含istanbul插桩的配置构建的:

  • 若手动启动应用:先执行带插桩的构建命令(如npm run build:dev,需确保该命令启用了Babel的istanbul插件),再启动Cypress。
  • 若用Cypress的devServer启动应用:确保devServer的配置(如Webpack/Vite配置)包含istanbul插件,保证实时编译的代码带有插桩逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:07:49