程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了代码覆盖率未显示在用于 Typescript 的 Sonarqube 上大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决代码覆盖率未显示在用于 Typescript 的 Sonarqube 上?

开发过程中遇到代码覆盖率未显示在用于 Typescript 的 Sonarqube 上的问题如何解决?下面主要结合日常开发的经验,给出你关于代码覆盖率未显示在用于 Typescript 的 Sonarqube 上的解决方法建议,希望对你解决代码覆盖率未显示在用于 Typescript 的 Sonarqube 上有所启发或帮助;

我在 nestJs 项目中使用 Sonarqube 分析。当我开玩笑地运行单元测试时,它们都通过了,代码覆盖率约为 80%。在 Sonarqube 上,它仍然显示为 0%。

我的sonar-project.propertIEs文件如下

sonar.projectKey=<project-key>
sonar.projectname=
sonar.sources=src
sonar.tests=src
sonar.inclusions=**
sonar.test.inclusions=src/**/*.spec.ts
sonar.testExecutionReportPaths=test-report.xml
sonar.exclusions=node_modules 

我的jest.Json如下

{
"modulefileExtensions": [
      "ts","tsx","Js","Json"
  ],"transform": {
      "^.+\\.tsx?$": "ts-jest"
  },"testRegex": "/src/.*\\.(test|spec).(ts|tsx|Js)$","collectCoverageFrom" : ["src/**/*.{Js,Jsx,tsx,ts}","!**/node_modules/**","!**/vendor/**"],"coverageReporters": ["Json","lcov"]
}

我的 package.Json 的相关部分

  "devDependencIEs": {
"@nestJs/cli": "^7.5.4","@nestJs/schematics": "^7.2.7","@nestJs/testing": "^7.6.11","@types/jest": "^26.0.20","@types/node": "^14.14.25","@types/supertest": "^2.0.10","@typescript-eslint/eslint-plugin": "^4.14.2","@typescript-eslint/parser": "^4.14.2","eslint": "^7.19.0","eslint-config-prettIEr": "^7.2.0","eslint-plugin-prettIEr": "^3.1.4","jest": "^26.6.3","jest-sonar-reporter": "^2.0.0","prettIEr": "^2.2.1","serverless": "^2.23.0","supertest": "^6.1.3","ts-jest": "^26.5.0","ts-loader": "^8.0.15","ts-node": "^9.1.1","tsconfig-paths": "^3.9.0","typescript": "^4.1.3"
  },"jest": {
"testResultsProcessor": "jest-sonar-reporter","modulefileExtensions": [
  "Js","Json","ts"
],"rootDir": "src","testRegex": ".*\\.spec\\.ts$","transform": {
  "^.+\\.(t|j)s$": "ts-jest"
},"collectCoverageFrom": [
  "**/*.(t|j)s"
],"coverageDirectory": "../coverage","testEnvironment": "node"
}

我的源代码和它们各自的单元测试位于同一位置。测试文件的扩展名为 .spec.ts

在本地运行测试时,所有测试都通过,并且在本地存储库上生成 test-report.xml。我们还在 Jenkins 上运行单元测试作为运行声纳扫描仪之前的一个阶段。

Sonarqube 代码覆盖率对我们来说是重要的指标,没有它,管道就不会进一步移动。这里有什么提示吗?

Sonarqube 企业版 7.9.5 版(内部版本 38598)

解决方法

您是否尝试过像这样指定 lcov.info 文件的路径: sonar.javascript.lcov.reportPaths=coverage/lcov.info

记录这些参数here:

,

我不能确定,但​​是您的症状与我在 SonarTS 插件中发现错误时所看到的相符。我们使用的是较旧版本的 SonarQube (7.9.2)。您还没有说明您使用的是哪个版本。

我从一些随机实验中发现,如果“lcov.info”文件中的文件路径跨越符号链接,SonarTS 插件将无法打开该文件,从而找到该文件的零覆盖率。如果 lcov.info 文件中的单个文件穿过符号链接,则很可能所有文件都将穿过。

我通过编写一个处理 lcov.info 文件的脚本来解决这个问题,将所有文件路径替换为它们的“绝对”文件路径,遵循符号链接。

我们 Jenkins 共享库中的代码如下所示:

shterse "cat coverage/lcov.info | " +
   "while IFS= read -r line; do if [[ \"\$line\" == \"SF:\"* ]]; then line=\"SF:\$(realpath \"\${line#SF:}\")\"; fi; echo \"\$line\"; done > /tmp/lcov.info"
sh "mv /tmp/lcov.info coverage/lcov.info"

“简洁”在哪里:

// This will turn off verbose output.
def shterse(cmd) {
    sh('#!/bin/sh -e\n' + cmd)
}

大佬总结

以上是大佬教程为你收集整理的代码覆盖率未显示在用于 Typescript 的 Sonarqube 上全部内容,希望文章能够帮你解决代码覆盖率未显示在用于 Typescript 的 Sonarqube 上所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: