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

Azure DevOps:如何同时发布.NET Core与Jest代码覆盖率报告

解决Azure Pipeline中.NET Core与Jest测试报告合并发布问题

1. 先确保两类测试生成兼容的报告格式

.NET Core测试部分

确保dotnet test命令生成标准TRX报告,任务配置示例:

- task: DotNetCoreCLI@2
  displayName: '运行.NET Core后端测试'
  inputs:
    command: 'test'
    projects: '**/*Tests.csproj'
    arguments: '--logger trx --results-directory $(Agent.TempDirectory)/TestResults'

这会把TRX测试报告输出到指定临时目录,方便后续工具识别。

Jest前端测试部分

Jest默认不生成Cobertura格式的覆盖率报告,需要补充配置:

  1. 在前端项目目录安装依赖:
npm install jest-junit --save-dev
  1. 在Pipeline中执行测试时,同时生成JUnit测试用例报告和Cobertura覆盖率报告:
- script: npm test -- --coverage --coverageReporters=cobertura --reporters=default --reporters=jest-junit
  displayName: '运行Jest前端测试并生成报告'
  workingDirectory: $(webProjectPath)
  env:
    JEST_JUNIT_OUTPUT_DIR: '$(Agent.TempDirectory)/JestTestResults'
    JEST_JUNIT_OUTPUT_NAME: 'jest-results.xml'

执行后会在$(webProjectPath)/coverage/生成cobertura-coverage.xml,同时在临时目录生成JUnit格式的测试用例报告。

2. 用ReportGenerator合并覆盖率报告

先确保你的Azure DevOps组织已安装ReportGenerator扩展(在市场搜索安装即可),然后添加合并任务:

- task: reportgenerator@5
  displayName: '合并.NET与Jest覆盖率报告'
  inputs:
    reports: |
      $(Agent.TempDirectory)/TestResults/*.trx
      $(webProjectPath)/coverage/cobertura-coverage.xml
    targetdir: '$(Build.ArtifactStagingDirectory)/coverage'
    reporttypes: 'HtmlInline_AzurePipelines;Cobertura'
    verbosity: 'Info'
  • reports参数同时指定两类报告路径,用换行分隔
  • targetdir将合并后的报告输出到构建工件目录,方便后续发布
  • reporttypes指定生成Azure Pipelines兼容的内嵌HTML报告和Cobertura格式,用于后续覆盖率发布

3. 分别发布测试用例结果(避免覆盖)

单独发布正常但同时发布看不到前端结果,大概率是两个PublishTestResults任务的testRunTitle重复,导致后一个覆盖前一个。解决方法是给每个任务设置唯一标题:

# 发布.NET Core测试用例结果
- task: PublishTestResults@2
  displayName: '发布.NET Core后端测试结果'
  inputs:
    testResultsFormat: 'VSTest'
    testResultsFiles: '$(Agent.TempDirectory)/TestResults/*.trx'
    testRunTitle: '.NET Core 后端单元测试'
    publishRunAttachments: true

# 发布Jest测试用例结果
- task: PublishTestResults@2
  displayName: '发布Jest前端测试结果'
  inputs:
    testResultsFormat: 'JUnit'
    testResultsFiles: '$(Agent.TempDirectory)/JestTestResults/jest-results.xml'
    testRunTitle: 'Jest 前端单元测试'
    publishRunAttachments: true

4. 发布合并后的覆盖率报告

最后把合并好的覆盖率报告发布到Azure Pipeline,就能在构建摘要中查看整体覆盖率:

- task: PublishCodeCoverageResults@1
  displayName: '发布合并的覆盖率报告'
  inputs:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: '$(Build.ArtifactStagingDirectory)/coverage/Cobertura.xml'
    reportDirectory: '$(Build.ArtifactStagingDirectory)/coverage'

常见坑点排查

  • 路径错误:检查$(webProjectPath)是否在Pipeline变量中正确定义,或改用相对路径(如src/FrontendProject)
  • ReportGenerator版本:确保使用最新任务版本(如@5),旧版本可能不兼容部分报告格式
  • Jest配置错误:若未生成Cobertura报告,检查--coverageReporters=cobertura参数是否正确传递,或在jest.config.js中直接配置覆盖率报告格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 23:12:03