node coverage javascript sonarqube karma-runner lcov karma-coverage

javascript - coverage - ¿Cómo cambiar el formato del informe LCOV ejecutado por Karma?



sonarqube javascript (1)

Configuré Karma para informar la cobertura de mi código JavaScript. Aquí está la parte de la configuración en el archivo karma.conf.js :

coverageReporter: { reporters: [ { type: ''html'', dir: ''build/karma/coverage'' }, { type: ''lcov'', dir: ''build/karma/coverage'', subdir: ''.'' }, { type: ''cobertura'', dir: ''build/karma/coverage'' } ] },

Mi archivo lcov.info tiene el siguiente formato:

TN: SF:./app/scripts/app.js FN:16,(anonymous_1) FN:26,(anonymous_2) FNF:2 FNH:1 FNDA:1,(anonymous_1) FNDA:0,(anonymous_2) DA:2,1 DA:20,1 DA:29,0 DA:34,0 LF:4 LH:2 BRF:0 BRH:0 end_of_record

Desafortunadamente, el complemento Sonarqube JavaScript solo considera las líneas que comienzan con SF: DA: o BRDA: (cf LCOVParser ).

Debido a eso, el informe HTML LCOV (hecho por Estambul) me da una cobertura de código más alta que Sonar en los mismos datos.

¿Hay alguna manera de cambiar el formato de lcov.info generado?

Si miro el código de Estambul , puedo imaginar el significado de las diferentes etiquetas:

  • BRF , BRH , BRDA son para sucursales .
  • FN , FNF , FNH , FNDA son para funciones .
  • LN , LF , LH son para líneas .
  • *F es el total, mientras que *H es la información cubierta.

La diferencia entre la cobertura de Estambul y Sonar parece deberse al hecho de que este último ignora por completo la cobertura de Funciones y Sucursales.

Alguna idea para resolver eso?


Podría ejecutar un script que sí lo haga: cat lcov.info | egrep "^(SF|DA|BRDA):" > lcov.info.new; mv lcov.info.new lcov.info cat lcov.info | egrep "^(SF|DA|BRDA):" > lcov.info.new; mv lcov.info.new lcov.info cat lcov.info | egrep "^(SF|DA|BRDA):" > lcov.info.new; mv lcov.info.new lcov.info .

Con eso obtengo:

SF:./app/scripts/app.js DA:2,1 DA:20,1 DA:29,0 DA:34,0