SonarQube与Jest单元测试

29

我一直在尝试找出如何让 SonarQube 同时加载我的 Jest Unit Tests.net Unit Tests

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

对于Jest,我使用sonar-jest-reporter导出了一个test-report.xml文件,并且还生成了lcov.info文件。

SonarQube能够读取lcov.info,并显示覆盖率%,但无论我将include/exclude或测试路径设置为什么,都不会显示与源文件相关的测试。

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

如果有人能指点我正确的方向,或者已经遇到并解决了这个问题的其他人,那将不胜感激。


1
为什么要显示测试文件?覆盖范围是你的.js文件,而不是.tests.js文件。我是否误解了你要做的事情?据我所知,lcov文件不包括有关哪些测试与哪些源文件相关联的数据。它只包括有关哪些行/分支由测试覆盖的数据。 - tehbeardedone
你在哪里看到SonarQube可以实现这个功能的? - Jeroen Heier
我看到了单元测试的计数,但是当你选择它时,它们是空白的。这就是我试图弄清楚的事情。难道这不是SQ的一个功能,可以查看覆盖率和测试吗? - Matt B.
2个回答

49

看来我已经找到了让它正常工作的方法。诀窍在于将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

现在你的测试文件也会显示出来。
更多信息请参见此处

我正在使用Gradle插件org.sonarqube(目前版本为3.3),并且必须稍微修改配置: 在属性sonar.test.inclusions中,我必须删除前面的“src /”,因为插件似乎在路径中寻找带有“src / src / ...”的测试,并抱怨我的测试没有该路径。(实际上它并没有确切地抱怨,只是从堆栈跟踪中读取了它)。 - cyberbrain
当我将sonar.sourcessonar.tests设置为相同的路径时,我会收到以下错误:##[error]ERROR: Error during SonarScanner execution ERROR: File App.config can't be indexed twice. Please check that inclusion/exclusion patterns produce disjoint sets for main and test files设置包含/排除模式需要花费大量的精力来尝试匹配所有情况。我正在谈论使用C#和NUnit作为测试运行器的Visual Studio解决方案,以及使用Jest测试运行器的Javascript和React。有什么建议吗? - Riccardo Merlin

1
如果您的 js 文件没有显示覆盖率,则尝试使用绝对路径来选择您的 lcov,或者尝试将 lcov 路径设置为 sonar.javascript.lcov.reportPaths=./coverage/jest/lcov.info。不确定是否有用,但对我有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接