在Azure DevOps中发布代码覆盖率时找不到覆盖文件

4
我是使用 Node 14.x 和 Jest 26.x。在 package.json 文件中有一个 npm test 脚本,其包含以下内容:

cross-env NODE_ENV=test jest --coverage --forceExit

当我在本地运行它时,它会在./coverage目录中生成代码覆盖率报告。 ./coverage目录的内容如下:
lcov-report (folder)
clover.xml
coverage-final.json
lcov.info

看起来 clover.xml 包含代码覆盖率报告。更多细节可以在 lcov-report 文件夹中找到。 我已经为代码覆盖率设置了 Azure DevOps 管道,如下所示:

...
- task: PublishTestResults@2
  condition: succeededOrFailed()
  inputs:
    testRunner: JUnit
    testResultsFiles: '**/junit.xml'

# Publish code coverage results
# Publish Cobertura or JaCoCo code coverage results from a build
- task: PublishCodeCoverageResults@1
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/coverage/clover.xml'

运行流水线后,Azure DevOps似乎找不到cover.xml文件。我收到以下错误:

##[debug]Result: true
##[debug]Report directory: /home/vsts/work/_temp/cchtml
Reading code coverage summary from '/home/vsts/work/1/s/coverage/clover.xml'
##[warning]No coverage data found. Check the build errors/warnings for more details.
##[debug]Processed: ##vso[codecoverage.publish codecoveragetool=Cobertura;summaryfile=/home/vsts/work/1/s/coverage/clover.xml;reportdirectory=/home/vsts/work/_temp/cchtml;]

我还尝试了以下关于summaryFileLocation的选项,但结果都出现了相同的错误。

'**/coverage/clover.xml'
'$(System.DefaultWorkingDirectory)/**/coverage/clover.xml'

我知道 clover.xml 的格式可能与 CoberturaJaCoCo 不同,但至少Azure应该能够找到该文件。 我缺少什么?

1个回答

5
我无意中找到了一种方法。
看起来 Jest 可以生成 cobertura 覆盖率报告。需要在 Jest 配置中添加。我已经在 jest.config.js 中添加了以下内容:
coverageReporters: ['text', 'text-summary', 'clover', 'cobertura']

Jest生成了cobertura覆盖文件在:
./coverage/cobertura-coverage.xml

接下来,我将Azure管道文件修改如下:
- task: PublishCodeCoverageResults@1
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/coverage/cobertura-coverage.xml'

经过这些更改后,当我运行流水线时,Azure DevOps可以找到文件并显示覆盖报告!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接