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

Cypress代码覆盖率:合并E2E与组件测试报告配置问询

解决Cypress E2E与组件测试覆盖率报告合并问题

要让Cypress的E2E测试和组件测试覆盖率报告合并而非互相覆盖,核心思路是让两类测试生成独立的覆盖率原始数据文件,再通过nyc工具合并数据并生成统一报告。以下是具体步骤:

1. 修改Cypress配置文件

更新cypress.config.js,为两类测试指定不同的覆盖率数据存储目录,避免互相覆盖:

const { defineConfig } = require("cypress");
const fs = require('fs-extra');

module.exports = defineConfig({
  e2e: {
    baseUrl: "http://localhost:3000",
    setupNodeEvents(on, config) {
      // 为E2E测试指定覆盖率数据目录
      const coverageDir = process.env.CYPRESS_COVERAGE_DIR || '.nyc_output/e2e';
      fs.ensureDirSync(coverageDir);
      
      config.env.coverage = {
        ...config.env.coverage,
        nyc: {
          ...config.env.coverage?.nyc,
          reportDir: coverageDir,
          tempDir: coverageDir,
          output: `${coverageDir}/out.json`
        }
      };

      require("@cypress/code-coverage/task")(on, config);
      return config;
    },
  },

  component: {
    devServer: {
      framework: "create-react-app",
      bundler: "webpack",
      webpackConfig: {
        mode: "development",
        devtool: false,
        module: {
          rules: [
            {
              test: /\.js$/,
              exclude: /node_modules/,
              use: {
                loader: "babel-loader",
                options: {
                  presets: ["@babel/preset-env", "@babel/preset-react"],
                  plugins: ["istanbul"],
                },
              },
            },
          ],
        },
      },
    },
    setupNodeEvents(on, config) {
      // 为组件测试指定覆盖率数据目录
      const coverageDir = process.env.CYPRESS_COVERAGE_DIR || '.nyc_output/component';
      fs.ensureDirSync(coverageDir);
      
      config.env.coverage = {
        ...config.env.coverage,
        nyc: {
          ...config.env.coverage?.nyc,
          reportDir: coverageDir,
          tempDir: coverageDir,
          output: `${coverageDir}/out.json`
        }
      };

      require("@cypress/code-coverage/task")(on, config);
      return config;
    },
  },
});

2. 添加npm脚本

在package.json中添加测试、合并、生成报告的脚本,实现一键执行全流程:

{
  "scripts": {
    "pretest:coverage": "rimraf .nyc_output coverage",
    "test:e2e:coverage": "CYPRESS_COVERAGE_DIR=.nyc_output/e2e cypress run --e2e",
    "test:component:coverage": "CYPRESS_COVERAGE_DIR=.nyc_output/component cypress run --component",
    "test:merge-coverage": "nyc merge .nyc_output .nyc_output/merged.json",
    "test:generate-report": "nyc report --reporter=lcov --reporter=html --temp-dir=.nyc_output",
    "test:coverage": "npm run test:e2e:coverage && npm run test:component:coverage && npm run test:merge-coverage && npm run test:generate-report"
  }
}

脚本说明:

  • pretest:coverage:每次执行前清空旧的覆盖率数据和报告目录,避免历史数据干扰。
  • test:e2e:coverage:运行E2E测试并将覆盖率数据存入.nyc_output/e2e目录。
  • test:component:coverage:运行组件测试并将覆盖率数据存入.nyc_output/component目录。
  • test:merge-coverage:用nyc merge命令合并两个目录下的覆盖率数据,生成统一的merged.json文件。
  • test:generate-report:基于合并后的数据生成HTML和LCOV格式的报告,默认输出到coverage目录。
  • test:coverage:一键串联执行所有步骤,直接生成最终合并报告。

3. 安装必要依赖

如果项目中还未安装以下依赖,执行命令安装:

npm install nyc fs-extra rimraf --save-dev

4. 执行测试并生成合并报告

运行以下命令即可完成两类测试的覆盖率合并:

npm run test:coverage

执行完成后,打开coverage/index.html即可查看合并后的完整覆盖率报告。

内容的提问来源于stack exchange,提问作者Adnan Arif Sait

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:03:16