我们的项目中混合了 javascript 和 typescript 源,这些源在我们的 SonarQube 实例中进行了报告。
直到最近,我们还在运行纯 JavaScript 代码库,因此使用默认的 JavaScript 插件和 Sonar 来衡量我们的指标。
现在将大部分代码迁移到 typescript 后,我们已经配置了 SonarTsPlugin ( https://github.com/Pablissimo/SonarTsPlugin ) 并生成了两个 lcov 文件(使用 gulp 和 istanbul),一个用于我们的 js 源,另一个用于 ts。
在本地查看结果时,我们的综合覆盖率超过 95%(使用 gulp istanbul-combine),但是当 SonarQube 在读取 lcov 文件后应用其计算时,它显示总体覆盖率略低于 90%。我看过其他帖子解释 Sonar 如何计算其整体数字 - Sonar-Overall Coverage
我试图找出为什么会有如此大的差异。
我们使用 Jenkins 及其 Sonar 扫描仪插件,当它连接到我们的 Sonar 实例并发布结果时查看构建日志时,我看到以下内容:
整体覆盖传感器似乎只有在读取与 javascript 源相关的 lov 文件后才会启动。
当在日志中进一步读取 typesecript 源的 karma-remapped-coverage.json 文件时,传感器似乎不会再次触发。我想知道这可能是我看到这种差异的原因吗?
最佳答案
您没有列出您的 SonarQube 版本,但 6.2 包含“强制覆盖率为零”功能(适用于分析器提供必要的“可执行行”数据的语言)。标准覆盖率报告完全忽略没有测试的文件。
假设我有 10 个文件,每个文件有 100 行。其中八个经过 100% 测试,其中两个根本没有经过测试。标准覆盖率报告会说我的覆盖率是 100%,而实际上覆盖率是 80%。
SonarQube 6.2 的“强制覆盖范围为 0”功能为您提供了更准确的图像,这很可能是您在 SonarQube 中看到较低的总覆盖范围数字的原因。
关于javascript - 总体覆盖率指标并不反射(reflect)我的本地结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41979813/