Don*_*alo 4 unit-testing code-coverage jestjs azure-devops
我正在使用 Node14.x和 Jest 26.x。package.json 文件中有一个npm test脚本,其中包含以下内容:
cross-env NODE_ENV=test jest --coverage --forceExit
Run Code Online (Sandbox Code Playgroud)
当我在本地运行它时,它会在目录中生成代码覆盖率报告./coverage。目录内容./coverage如下:
lcov-report (folder)
clover.xml
coverage-final.json
lcov.info
Run Code Online (Sandbox Code Playgroud)
它看起来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'
Run Code Online (Sandbox Code Playgroud)
运行管道后,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;]
Run Code Online (Sandbox Code Playgroud)
我还尝试了以下选项,summaryFileLocation但都导致了相同的错误。
'**/coverage/clover.xml'
'$(System.DefaultWorkingDirectory)/**/coverage/clover.xml'
Run Code Online (Sandbox Code Playgroud)
我知道 的格式可能与或clover.xml不同,但至少Azure应该能够找到该文件。我缺少什么?CoberturaJaCoCo
我无意中发现了一个方法。
看起来Jest可以生成cobertura覆盖率报告。需要在 Jest 配置中添加。我在 中添加了以下内容jest.config.js:
coverageReporters: ['text', 'text-summary', 'clover', 'cobertura']
Run Code Online (Sandbox Code Playgroud)
Jest生成cobertura覆盖文件:
./coverage/cobertura-coverage.xml
Run Code Online (Sandbox Code Playgroud)
接下来我修改Azure管道文件如下:
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/coverage/cobertura-coverage.xml'
Run Code Online (Sandbox Code Playgroud)
进行此更改后,当我运行管道时,Azure DevOps 可以找到该文件并显示覆盖率报告!