I’m building a React aplication with typescript. When I try to set sonar.typescript.lcov.reportPaths property in sonar-project.properties, the SonarAnalysis activity set in my pipeline (Azure) just ignore lcov.info file (and then, no coverage is shown on SonarCloud). Not even a lcov reference is shown in activity log.
Curiously, when I set sonar.javascript.lcov.reportPaths property, the lcov file seams to be recognized (but I not sure if I should just do it).
Can someone help me?
I am using jest and ts-jest. This is my jest.config.js:
module.exports = {
preset: 'ts-jest',
testEnvironment: 'jsdom',
collectCoverage: true,
};
sonar-project.properties:
sonar.organization=xxxxx
sonar.projectKey=xxxxx
sonar.sources=src
sonar.tests=src
sonar.test.inclusions=src/**/*.test.ts
sonar.typescript.lcov.reportPaths=coverage/lcov.info
sonar.sourceEncoding=UTF-8
tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"typeRoots": ["node_modules/@types"],
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
"outDir": "./dist/",
"sourceMap": true
},
"include": ["./src/**/*"],
"exclude": ["node_modules"]
}
build.yaml (partial) (npm test = npx jest):
...
- job: CodeAnalysis
displayName: Test and Code Analysis
steps:
- task: NodeTool@0
inputs:
versionSpec: 10.x
displayName: Run npm command
- script: |
npm ci
npm test
- task: SonarCloudPrepare@1
inputs:
SonarCloud: 'Project - SonarCloud'
organization: 'xxxx'
scannerMode: 'CLI'
configMode: 'manual'
cliProjectKey: 'xxxx'
cliProjectName: 'xxxx'
cliSources: 'src'
- task: SonarCloudAnalyze@1
- task: SonarCloudPublish@1
inputs:
pollingTimeoutSec: '300'
...
lcov.info (partial):
...
TN:
SF:src\common\components\BarraDePesquisa\customHooks\BarraDePesquisa.hook.ts
FN:4,(anonymous_0)
FN:16,(anonymous_1)
FN:17,(anonymous_2)
FN:27,(anonymous_3)
FN:28,(anonymous_4)
FN:39,(anonymous_5)
FN:40,(anonymous_6)
FN:48,(anonymous_7)
FN:51,(anonymous_8)
FN:52,(anonymous_9)
FN:53,(anonymous_10)
FNF:11
FNH:11
FNDA:1,(anonymous_0)
FNDA:1,(anonymous_1)
FNDA:2,(anonymous_2)
FNDA:1,(anonymous_3)
FNDA:2,(anonymous_4)
FNDA:1,(anonymous_5)
FNDA:2,(anonymous_6)
FNDA:1,(anonymous_7)
FNDA:3,(anonymous_8)
FNDA:2,(anonymous_9)
FNDA:1,(anonymous_10)
DA:2,1
DA:4,1
DA:6,1
DA:7,1
DA:9,1
DA:10,1
DA:11,1
DA:13,1
DA:16,1
DA:17,1
DA:18,2
DA:19,2
DA:21,2
DA:24,1
DA:27,1
DA:28,1
DA:29,2
DA:30,2
DA:31,2
DA:33,2
DA:36,1
DA:39,1
DA:40,1
DA:41,2
DA:42,2
DA:45,1
DA:48,1
DA:49,1
DA:51,1
DA:52,3
DA:53,2
DA:54,2
DA:55,1
DA:60,1
LF:34
LH:34
BRDA:53,0,0,1
BRDA:53,0,1,1
BRDA:54,1,0,1
BRF:3
BRH:3
end_of_record
...