Nota del traductor
Esta es la traducción del archivo code-coverage.md. Aquí hay un enlace a las diferencias con la rama master de AVA (Si al hacer clic en el enlace no se encuentran modificaciones en el archivo code-coverage.md
, será por que la traducción está actualizada).
Traducciones: Español, Français, Italiano, 日本語, Portugués
Como AVA genera los archivos de test no se puede usar ['istanbul'] para la cobertura de código, en cambio, se puede lograr esto con ['nyc'] que es básicamente ['istanbul'] con apoyo de sub-process.
Primero instalar NYC:
$ npm install nyc --save-dev
Luego añadir los directorios de '.nyc_output' y 'coverage' al archivo '.gitignore'.
.gitignore
:
node_modules
coverage
.nyc_output
Usando NYC para proveer cobertura de código en ES5 es simple. Anteponer a su script de test con 'nyc':
{
"scripts": {
"test": "nyc ava"
}
}
Eso es todo!
Si desea crear informes HTML de cobertura o cargar datos de cobertura en Coveralls, debe saltar a estas secciones a continuación.
Usar Babel para transpilar nuestro código de producción es un poco más complicado. Aquí lo mostramos en varios pasos.
Primero, necesitamos la configuración de Babel. Lo siguiente es solo un ejemplo, necesitarás modificarlo según tus necesidades.
package.json
:
{
"babel": {
"presets": ["es2015"],
"plugins": ["transform-runtime"],
"ignore": "test.js",
"env": {
"development": {
"sourceMaps": "inline"
}
}
}
}
Hay dos cosas importantes a tener en cuenta en el ejemplo anterior.
-
Ignorar los archivos de test porque AVA ya maneja la transpilación de los tests por usted.
-
Especificar 'inline' en sourceMaps para desarrollo. Esto es importante para generar correctamente la cobertura. Utilizando la sección 'env' de la configuración de Babel nos permite desactivar la opción de sourceMaps para construcciones de producción.
Ya que es poco probable que quiera la opción 'inline' en sourceMaps en el código de la producción, debe especificar una variable de entorno alternativo en los scripts de compilación:
package.json
{
"scripts": {
"build": "BABEL_ENV=production babel --out-dir=dist index.js"
}
}
ATENCIÓN:
BABEL_ENV=production
no funciona en Windows, debe usar la palabra claveset
(set BABEL_ENV=production
). Para cruzar construcciones de plataforma, eche un vistazo across-env
.
Tenga en cuenta que el script anterior realmente tiene muy poco que ver con AVA y es sólo una demostración de cómo utilizar la configuración de 'env' de Babel para manipular su configuración, por lo que es compatible con AVA.
Para usar el 'require hook' de Babel, añada babel-core/register
a la sección require
de tu configuración de AVA en package.json
.
{
"ava": {
"require": ["babel-core/register"]
}
}
Nota: También puede establecer el require hook desde la consola de comandos: ava --require=babel-core/register
. No obstante, configurarlo en package.json
le ahorrará el tener que escribir dicho comando varias veces.
Si combinamos todos los pasos anteriores, su 'package.json' debería quedar de la siguiente manera:
{
"scripts": {
"test": "nyc ava",
"build": "BABEL_ENV=production babel --out-dir=dist index.js"
},
"babel": {
"presets": ["es2015"],
"plugins": ["transform-runtime"],
"ignore": "test.js",
"env": {
"development": {
"sourceMaps": "inline"
}
}
},
"ava": {
"require": ["babel-core/register"]
}
}
NYC crea un archivo de cobertura 'json' para cada proceso bifurcado en el directorio '.nyc_ouput'.
Para combinarlos en un reporte HTML entendible, haga lo siguiente:
$ ./node_modules/.bin/nyc report --reporter=html
O use un script de npm para ahorrarse el escribrlo:
{
"scripts": {
"report": "nyc report --reporter=html"
}
}
Esto generará un archivo HTML en el directorio de 'cobertura'.
Primero, debe logarse en coveralls.io y activar su repositorio.
Una vez hecho esto, añada coveralls
como una dependencia de desarrollo de npm:
$ npm install coveralls --save-dev
Entonces añada lo siguiente a su archivo de .travis.yml
:
after_success:
- './node_modules/.bin/nyc report --reporter=text-lcov | ./node_modules/.bin/coveralls'
Su informe de cobertura aparecerá en coveralls poco después de que Travis termine.