Bazel+Typescript+Jest环境下测试覆盖率报告生成问题咨询
两者的覆盖率收集逻辑冲突是问题的核心原因,Bazel默认注入的c8和Jest自带的覆盖率收集同时启用时会互相覆盖输出,所以只保留一端即可,优先用Jest原生配置灵活度更高,具体操作步骤如下:
步骤1:关闭Bazel自带的Node.js覆盖率收集逻辑
在你的BUILD文件中对应jest_test规则的属性里添加两项配置:
- 新增
coverage = False属性,禁用rules_nodejs默认注入的c8覆盖率逻辑 - 新增
tags = ["no-coverage"],避免Bazel全局覆盖率扫描时触发默认收集流程
步骤2:配置Jest侧的V8覆盖率能力
修改jest.config.js配置文件,保留你原有配置的基础上新增以下字段:
module.exports = { // 原有配置保持不变 coverageProvider: "v8", reporters: [ "default", ["jest-junit", { outputDirectory: process.env.XML_OUTPUT_DIR }], // 新增lcov报告输出,自动适配Bazel的覆盖率输出目录 ["lcov", { outputDirectory: process.env.COVERAGE_OUTPUT_DIR || "./coverage" }] ], // 按需配置覆盖率统计的包含/排除路径 collectCoverageFrom: [ "src/**/*.{ts,tsx,js,jsx}", "!src/**/*.d.ts", "!src/**/*.test.*" ] }
说明:执行bazel coverage命令时,rules_nodejs会自动注入COVERAGE_OUTPUT_DIR环境变量,不需要你手动指定路径
步骤3:验证执行
运行bazel coverage //app:test,执行完成后可以在bazel-testlogs/app/test/coverage.dat路径拿到合并后的lcov格式覆盖率报告。
内容的提问来源于stack exchange,提问作者lqc
相关产品推荐
相关产品推荐

