SonarQube JS UT coverage is always zero. However, jscoverage.xml import looks good

1.5k Views Asked by At

I'm using SonarQube 6.3.1 and I'm running jenkins to create SonarQube dashboard. So, I need to run jenkins job to create js coverage report and import to SonarQube to create UT coverage.

By setting SonarQube Scanner in Jenkins, here is properties:

sonar.projectKey=xxxxxxManagement
sonar.projectName=XXXXXX Management
sonar.projectVersion=1.0

sonar.language=js
sonar.sources=webapp

sonar.sourceEncoding=UTF-8
sonar.javascript.coveragePlugin=jacoco
sonar.javascript.lcov.reportPaths=target/jscoverage/jscoverage.xml
sonar.dynamicAnalysis=reuseReports

sonar.login=admin
sonar.password=admin

In Jenkins, here is the report path and report context: report path and context

Here is SonarQube report: Here is SonarQube report

However, SonarQube dashboard shows JS UT coverage is 0

I'm wondering if sonar.javascript.lcov.reportPaths setting is wrong, so I have tried many ways I have tried:

sonar.javascript.lcov.reportPaths=./target/jscoverage/jscoverage.xml

I also tried:

sonar.javascript.lcov.reportPaths=/target/jscoverage/jscoverage.xml

but UT coverage is always zero

Since I can see report created correctly, I doubt if import to SonarQube fail, but no error log shows in Jenkins console.


6/29 Add new updates from my investigation, From Jenkins log,

INFO: Analysing [/var/jenkins_home/sharedspace/target/jscoverage/jscoverage.xml]
INFO: Sensor JavaScript Squid Sensor [javascript] (done) | time=1611ms
INFO: Sensor Zero Coverage Sensor
INFO: Sensor Zero Coverage Sensor (done) | time=36ms
INFO: Sensor Code Colorizer Sensor
INFO: Sensor Code Colorizer Sensor (done) | time=1ms
INFO: Sensor CPD Block Indexer
INFO: org.sonar.scanner.cpd.deprecated.DefaultCpdBlockIndexer@4644f3d4 is used for js
DEBUG: No CpdMapping for language js
INFO: Sensor CPD Block Indexer (done) | time=0ms
INFO: Calculating CPD for 16 files
DEBUG: Detection of duplications for /var/jenkins_home/sharedspace/webapp/Component.js
DEBUG: Detection of duplications for /var/jenkins_home/sharedspace/webapp/model/util.js
DEBUG: Detection of duplications for /var/jenkins_home/sharedspace/webapp/controller/IncidentDetail.controller.js
DEBUG: Detection of duplications for /var/jenkins_home/sharedspace/webapp/model/formatter.js
DEBUG: Detection of duplications for /var/jenkins_home/sharedspace/webapp/util/Validator.js
DEBUG: Detection of duplications for /var/jenkins_home/sharedspace/webapp/localService/mockserver.js
DEBUG: Detection of duplications for /var/jenkins_home/sharedspace/webapp/controller/Attachments.controller.js
DEBUG: Detection of duplications for /var/jenkins_home/sharedspace/webapp/model/models.js
DEBUG: Detection of duplications for /var/jenkins_home/sharedspace/webapp/controller/HelpRequestOverview.controller.js
DEBUG: Detection of duplications for /var/jenkins_home/sharedspace/webapp/controller/NotFound.controller.js
DEBUG: Detection of duplications for /var/jenkins_home/sharedspace/webapp/controller/ErrorHandler.js
DEBUG: Detection of duplications for /var/jenkins_home/sharedspace/webapp/controller/CreateIncident.controller.js
DEBUG: Detection of duplications for /var/jenkins_home/sharedspace/webapp/controller/BaseController.js
DEBUG: Detection of duplications for /var/jenkins_home/sharedspace/webapp/controller/HelpRequestDetail.controller.js
DEBUG: Detection of duplications for /var/jenkins_home/sharedspace/webapp/controller/HelpRequests.controller.js
DEBUG: Detection of duplications for /var/jenkins_home/sharedspace/webapp/controller/App.controller.js
INFO: CPD calculation finished

From log, we can see there is no error message so I added shell script in Post Steps in Jenkins Job:

cd target/jscoverage
pwd
vi jscoverage.xml

and Jenkins log shows:

<coverage files="11" line-rate="0.7357294" lines-covered="348" lines-valid="473"[3;2Htimestamp="1498722804050">
<modules>
<module name="/Component.js" filename="/Component.js" line-rate="0.84210527" lin[6;1Hes-covered="16" lines-valid="19">
<lines>
<line number="1" hits="1"/>
<line number="8" hits="1"/>
<line number="10" hits="1"/>
<line number="24" hits="1"/>
<line number="27" hits="1"/>
<line number="30" hits="1"/>
<line number="32" hits="1"/>
<line number="35" hits="1"/>
<line number="36" hits="1"/>
<line number="39" hits="1"/>
<line number="49" hits="1"/>
<line number="51" hits="1"/>
<line number="61" hits="1"/>
<line number="63" hits="1"/>
<line number="64" hits="1"/>
...

From 2 pieces of log we can see that report looks good and SonarQube reads report succuessfully, and we can see UT cover file by file in the xml report, but UT coverage is still zero.


7/3 I have added dependency

<dependency>
  <groupId>fr.sii.sonar</groupId>
  <artifactId>sonar-coverage-lcov</artifactId>
  <version>2.1.0</version>
</dependency>

and changed

<sonar.javascript.jscoverage.reportPath>${project.build.directory}/jscoverage/jscoverage.xml</sonar.javascript.jscoverage.reportPath>

from jscoverage.xml to jscoverage.lcov but still not work

1

There are 1 best solutions below

5
On

The report your are trying to import looks like an xml file. For JavaScript, SonarQube supports coverage reports in LCOV format. See documentation : https://docs.sonarqube.org/display/PLUG/JavaScript+Coverage+Results+Import

Depending on the coverage tool you are using, there might be an option to generate the report in the LCOV format.