Jest v28分片合并lcov覆盖率报告丢失分支数据如何解决
问题根因
系统原生的lcov CLI工具默认关闭分支覆盖率的解析与写入逻辑,未显式开启对应配置时,合并tracefile的过程会自动丢弃所有BRDA、BRF、BRH分支相关字段,最终输出的报告就会提示无分支覆盖率数据。
可行解决方案
方案1:补全lcov CLI执行参数
合并命令中显式传入分支覆盖率启用的配置项,强制工具保留全量分支数据:
lcov --rc lcov_branch_coverage=1 \ --add-tracefile ./coverage-unit/lcov-1.info \ --add-tracefile ./coverage-unit/lcov-2.info \ --output-file ./coverage-unit/lcov.info
执行后输出的覆盖率摘要会正常显示分支覆盖率统计值,不会再出现branches...: no data found的提示。
注意:如果后续需要调用
genhtml生成可视化的覆盖率html页面,同样需要带上--rc lcov_branch_coverage=1参数,否则生成的页面不会展示分支覆盖维度的数据。
方案2:使用Node生态工具合并(CI环境适配性更好)
如果不想处理系统级lcov的版本差异、参数适配问题,可以直接使用Node生态下专门适配Jest等前端测试框架的lcov合并工具,默认完整保留所有覆盖率字段,无格式兼容问题:
- 安装开发依赖:
npm install lcov-result-merger --save-dev
- 执行合并命令,支持通配符匹配所有分片生成的lcov文件:
npx lcov-result-merger './coverage-unit/lcov-*.info' > ./coverage-unit/lcov.info
合并结果校验
合并完成后执行以下命令,能正常输出匹配到的分支字段内容即代表合并成功,可直接用于PR环节的代码质量校验:
grep -E "BRH|BRF|BRDA" ./coverage-unit/lcov.info
内容的提问来源于stack exchange,提问作者Flash
相关产品推荐
相关产品推荐

