如何为包含TypeScript与C#的.NET Core项目启用拉取请求代码覆盖率检查并支持双语言覆盖率展示
如何为包含TypeScript与C#的.NET Core项目启用拉取请求代码覆盖率检查并支持双语言覆盖率展示
嘿,我刚好遇到过类似的场景,给你整理一套能解决这个问题的步骤——核心是要让PR的代码覆盖率检查能识别到合并后的双语言报告,而不是只认单一语言的报告:
1. 确保两种语言都生成标准的Cobertura格式覆盖率报告
首先得让C#和TypeScript的测试工具都输出Cobertura格式的报告,这是后续合并和PR识别的基础:
- C# 端:在你的
VSTest@2任务里,加上代码覆盖率收集参数,比如:
这个配置会生成OpenCover格式的原始报告,后续可以用ReportGenerator把它转成Cobert格式。- task: VSTest@2 inputs: testAssemblyVer2: '**/*Tests.dll' platform: '$(buildPlatform)' configuration: '$(buildConfiguration)' codeCoverageEnabled: true otherConsoleOptions: '--collect:"XPlat Code Coverage"' - TypeScript/Jest 端:修改Jest的配置(
jest.config.js)或者运行命令,指定输出Cobertura报告:- 配置文件方式:
module.exports = { // 其他配置... coverageReporters: ['cobertura', 'html'] }; - 命令行方式:运行
jest --coverage --coverageReporters cobertura,生成的报告默认在coverage/cobertura-coverage.xml路径下。
- 配置文件方式:
2. 用ReportGenerator合并两份Cobertura报告
这一步你之前已经试过,但要确保合并后的报告路径清晰,方便后续发布:
- task: reportgenerator@5 displayName: 'Merge Code Coverage Reports' inputs: reports: '**/coverage.cobertura.xml,**/cobertura-coverage.xml' targetdir: '$(Build.ArtifactStagingDirectory)/merged-coverage' reporttypes: 'Cobertura' verbosity: 'Info'
这里的reports参数要包含C#和TS生成的两份Cobertura文件路径,确保路径匹配正确(可以用通配符,也可以写绝对路径)。
3. 发布合并后的报告到PR检查(关键步骤!)
你之前的问题大概率出在这里:只在报告tab显示了合并结果,但没让PR检查任务读取这份合并报告。需要用PublishCodeCoverageResults@2任务,指定合并后的Cobertura文件,并且确保这个任务在PR触发的流水线中执行:
- task: PublishCodeCoverageResults@2 displayName: 'Publish Merged Coverage to PR' inputs: codeCoverageTool: 'Cobertura' summaryFileLocation: '$(Build.ArtifactStagingDirectory)/merged-coverage/Cobertura.xml' failIfCoverageEmpty: false
这个任务会把合并后的覆盖率数据同步到Azure DevOps的PR检查系统里,让PR能识别到双语言的覆盖率情况。
4. 确认分支策略配置
最后去你的项目分支策略里(比如main分支的策略),找到「代码覆盖率」检查项:
- 勾选「要求代码覆盖率不低于指定阈值」(可以根据需求设置阈值)
- 确保这个检查项关联的是你刚才发布的合并报告(Azure DevOps会自动识别,要是没识别到,重新运行一次PR流水线试试)
额外注意事项
- 检查两份原始报告的路径,避免ReportGenerator找不到文件(可以在流水线日志里查看ReportGenerator的执行日志,确认是否成功读取两份报告)
- 如果是GitHub Actions而非Azure DevOps,思路类似:生成双语言Cobertura报告,用ReportGenerator合并后,上传到Codecov或者GitHub自带的代码覆盖率检查服务
- 测试时可以手动触发一次PR的流水线,查看
PublishCodeCoverageResults任务的日志,确认是否包含了TS和C#的覆盖率数据
备注:内容来源于stack exchange,提问作者Eric Hu
相关产品推荐
相关产品推荐

