【问题标题】:SonarQube with Jest Unit Tests带有 Jest 单元测试的 SonarQube
【发布时间】:2018-06-03 10:59:09
【问题描述】:

我一直在尝试找出如何使用 Jest 单元测试.net 单元测试 来填充 SonarQube

我有一个本地版本的 SQ 6.7 以及所有最新版本的 Javascript 和 C# 插件。

说到 Jest,我有 sonar-jest-reporter 来导出一个 test-report.xml 文件,并且还生成了 lcov.info 文件。

SonarQube 能够读取 lcov.info 并且我看到覆盖率 %,但无论我设置为 include/exclude 还是测试路径,它都不会显示与源文件关联的测试。

文件结构都是.js.test.js与每个模块在同一个目录下。

任何帮助我指出正确的方向,或者遇到并克服这个问题的其他人,我们将不胜感激。

【问题讨论】:

  • 为什么要它显示测试文件?覆盖范围适用于您的 .js 文件,而不是您的 .tests.js。我是否误解了您要执行的操作?据我所知,lcov 文件不包含有关哪些测试与哪些源文件相关联的数据。它只包括测试覆盖了哪些行/分支的数据。
  • 你在哪里读到这在 SonarQube 中是可能的?
  • 我看到了单元测试的计数,但是当你选择它时,它们是空白的。这就是我想要弄清楚的。这不是 SQ 的一个功能,可以查看覆盖率和测试吗?

标签: unit-testing sonarqube jestjs


【解决方案1】:

看来我已经找到了让它发挥作用的方法。诀窍是让sonar.sourcessonar.tests 都指向同一个目录(因为我们在同一个目录中同时拥有测试和源代码),然后使用sonar.tests.inclusions 对带有.test.js.spec.js 扩展名的测试文件进行模式匹配。

这是一个示例 sonar-project.properties,它假设如下:

  1. src/components/Foo/Foo.jsx 主要组件。
  2. src/components/Foo/Foo.spec.jsx 测试文件。
# Source
sonar.sources=src
# Where to find tests file, also src
sonar.tests=src
# But we get specific here
# We don't need to exclude it in sonar.sources because it is automatically taken care of
sonar.test.inclusions=src/**/*.spec.js,src/**/*.spec.jsx,src/**/*.test.js,src/**/*.test.jsx

# Now specify path of lcov and testlog
sonar.javascript.lcov.reportPaths=coverage/jest/lcov.info
sonar.testExecutionReportPaths=coverage/jest/testlog.xml

现在您的测试文件也会显示出来。

More information here

【讨论】:

  • 我正在使用 Gradle 插件 org.sonarqube(目前是 3.3 版)并且不得不稍微修改配置:在属性 sonar.test.inclusions 我必须 remove i> 前面的src/ 似乎该插件在路径中寻找带有“src/src/...”的测试,并抱怨我的测试没有该路径。 (实际上它并没有抱怨这一点,只是从堆栈跟踪中读取它)。
  • 当我将 sonar.sourcessonar.tests 设置为同一路径时,我收到此错误:##[error]ERROR: Error during SonarScanner execution ERROR: File App.config can't be indexed two .请检查包含/排除模式是否会为主文件和测试文件生成不相交的集 设置包含/排除模式需要大量努力来尝试匹配所有案例。我说的是一个 Visual Studio 解决方案,它使用 C# 和 NUnit 用于测试运行器、Javascript 和 React with Jest 测试运行器。有什么建议吗?
【解决方案2】:

如果您的js 文件未显示覆盖范围,请尝试使用lcov 的绝对路径或尝试将lcov 路径用作sonar.javascript.lcov.reportPaths=./coverage/jest/lcov.info 不确定这是否对您有帮助,但它适用于我。

【讨论】:

    猜你喜欢
    • 2019-05-28
    • 1970-01-01
    • 2022-08-24
    • 2023-03-13
    • 2019-11-28
    • 2018-12-16
    • 2020-08-04
    • 2022-01-02
    • 2019-04-03
    相关资源
    最近更新 更多