为什么基于玩笑的单元测试现在导致 0% 的测试覆盖率?

Why are jest-based unit tests now resulting in 0% test coverage?

我不是前端开发人员,但我需要使用单元测试覆盖率进行声纳扫描。所有这些都在工作,但是我们对 SonarQube 进行了一次大的版本升级(6.x 到 7.9.1),它有一段时间坏了,现在我正试图让它再次工作。

因为这曾经有效,我们所拥有的一定很接近,但有些细节不太正确。

当构建 运行s 时,它 运行s 进行单元测试并似乎生成覆盖率数据,并且对 "sonar-scanner" 的调用将路径发送到 lcov.info 文件。在SonarQube项目中,它有大量"lines to cover",但未覆盖的线数相同。我还注意到它在概述中没有 "Unit Tests" 部分。

在构建输出中,我看到了很多这样的行:

DEBUG: 'src/api/Api.spec.tsx' indexed as test with language 'ts'

但是如上所述,SonarQube 项目似乎不认为有任何单元测试。

作为构建脚本的一部分,在测试结束时 运行,我 运行 "ls -lt coverage" 查看生成的内容,结果显示如下:

total 6264
-rw-r--r-- 1 81050 20059 1229978 Jan  4 19:12 clover.xml
-rw-r--r-- 1 81050 20059  720443 Jan  4 19:12 lcov.info
drwxr-xr-x 6 81050 20059    4096 Jan  4 19:12 lcov-report
-rw-r--r-- 1 81050 20059 4455341 Jan  4 19:12 coverage-final.json

我在该文件中看到了对 "Api.tsx"(以及许多其他)的引用,但我没有看到对 "Api.spec.tsx" 的引用,但我不知道我是否应该期待任何引用。

我查看了 "package.json" 中的 jest 配置,但没有发现任何明显的问题。

我还能在这里展示什么可能提供线索?

更新:

这是生成的声纳扫描仪命令行,有一些省略:

sonar-scanner -Dsonar.typescript.node=/opt/app/bin/node -Dsonar.nodejs.executable=/opt/app/bin/node -Dsonar.host.url=http://... -Dsonar.login=... -Dsonar.password= -Dsonar.javascript.lcov.reportPaths=coverage/lcov.info -Dsonar.typescript.lcov.reportPaths=coverage/lcov.info -Dsonar.branch.name= -Dsonar.language=js -Dsonar.projectKey=... -Dsonar.projectName=... '-Dsonar.exclusions=**/*.scss.d.ts, **/*.scss, **/*Props.ts, **/*State.ts, **/*index.ts' '-Dsonar.coverage.exclusions=**/*.spec.tsx, **/*.spec.ts, **/*.scss.d.ts, **/*.css.d.ts, **/*.scss' -Dsonar.projectVersion=1.0.0 '-Dsonar.sources=src/components/,src/api/,src/models/mappers/, src/utils/' '-Dsonar.lang.patterns.js=*/.ts,*/.tsx' -Dsonar.js.file.suffixes=.ts,.tsx -Dsonar.sourceEncoding=UTF-8 -Dsonar.tests=src '-Dsonar.test.inclusions=**/*.spec.tsx' -Dsonar.typescript.tslintconfigpath=tslint.json -Dsonar.log.level=DEBUG -Dsonar.verbose=true '-Dsonar.exec.maxBuffer=1024 * 1024'

我忘了我问过这个问题。我不得不回到代码和历史记录,看看我是否记得我做了什么来修复它。我想这就是我在这里发现的:

https://community.sonarsource.com/t/sensor-sonarts-coverage-fails-to-match-path-with-symbolic-link/14601

简而言之,如果生成的文件中的文件路径包含符号 link 条目,则 SonarTS 中存在一个错误,导致它无法遵循符号 links。我为解决此特定问题所做的工作是检查我生成的文件以了解正在使用的符号 link 的模式,并且我编写了一个脚本来 post-process lcov.info 和test-report.xml 文件,用非符号 linked 文件的绝对路径替换符号 links 的路径。