node.js - studio - ¿Cómo hacer que Estambul genere cobertura para todo mi código fuente?
istanbul node js (4)
En mi caso, --include-all-sources
no funcionó para mí. Los archivos que no require
-d todavía se excluyeron del informe de cobertura final.
Finalmente, me encontré con este problema en el GitHub de istanbul
donde el mantenedor declaró:
Sí, ese es el comportamiento esperado. Estambul funciona al enganchar, por lo tanto, si un archivo nunca es requerido, es como si no existiera.
La única solución infalible que encontré fue require
manualmente todos los archivos que quería incluir en mi informe de cobertura. Creo el archivo include-all.test.js
junto con mis otros scripts de prueba y agregué el siguiente bit de código:
var glob = require( ''glob'' )
var path = require( ''path'' );
glob.sync( ''./path/to/js/code/*.js'' ).forEach( function( file ) {
// we don''t care about errors here, we just want to require the file
try {
require( path.resolve( file ) );
} catch(e) {}
});
Esto asegurará absolutamente que sus archivos no probados se incluyan en el informe de cobertura de istanbul
.
Actualmente, Estambul solo está generando cobertura para los archivos que se usan en mis pruebas, lo cual está bien, pero parece anular el propósito de tener cobertura.
No tengo ninguna configuración de Estambul, y la npm test
mediante la npm test
con la siguiente secuencia de comandos:
$ istanbul cover _mocha -- -R dot --check-leaks --recursive test/
¿Hay alguna forma de generar cobertura para todo mi código fuente?
Encontré la respuesta, creo que en parte tengo suerte de que la estructura de directorios que elegí me permita usar esta opción, pero mi comando de prueba es ahora:
$ istanbul --include-all-sources cover _mocha -- -R dot --recursive test/
La --include-all-sources
es la parte importante.
Estambul recomienda usar nyc para verificar la cobertura del código. Sugiere un enfoque como este:
nyc mocha
Después de ejecutar este comando, obtendremos el informe de cobertura. Pero hay un par de trampas.
En primer lugar, por defecto, mocha
está buscando pruebas en la test
carpeta. Para anularlo, tenemos que establecer nuestra propia ruta en el archivo mocha.opts
como este:
nyc mocha --opts ./mocha.opts
Y mocha.opts
contiene tal código, por ejemplo:
spec/unit/back-end/**/*.spec.js
Otro problema es que, de forma predeterminada, nyc
comprueba la cobertura de solo los archivos requeridos, de lo que trata su pregunta. La solución es configurar dos opciones para nyc
(ejecuto test como un script npm, así que configuro las opciones en package.json). Aquí está el código:
"nyc": {
"all": true,
"include": [
"routes/*.js",
"routes/**/*.js",
"models/*.js"
]
},
"scripts": {
"mocha": "nyc mocha --opts ./mocha.opts",
}
Otra forma de lograrlo es establecer no include
, pero exclude
opción para excluir de la cobertura la verificación de archivos inapropiados. Es extraño, pero la única opción no funciona, requiere include
o exclude
opciones. Puede obtener más información sobre las opciones de nyc --help
través de nyc --help
.
PD: no sé nyc
y mocha
profundamente y solo estoy basado en mi propia experiencia.
Para generar cobertura para todos los archivos, tenga lo siguiente en su package.json
"istanbulCoverage": " nyc --reporter = lcov --reporter = text-lcov --all -x /" ./ node_modules / / "-x /" ./ cobertura / / "check-cover --funciones 90 npm prueba
Aquí, todas las banderas capturan todos los archivos en su proyecto. Si desea excluir archivos o carpetas específicos, puede utilizar la opción -x .
Aparte de esto, si desea especificar la tasa de cobertura para su aplicación, use la opción de cobertura de verificación para especificar el umbral. En mi caso, he especificado funciones para tener un umbral de cobertura del 90%. De lo contrario, la generación del informe de cobertura falla (estoy ejecutando mi prueba de karma después de la generación del informe de cobertura).
Espero que esto haya ayudado :)