javascript unit-testing mocha gulp istanbul

javascript - Informe de cobertura completo de Gulp Istanbul



unit-testing mocha (4)

para mostrar la cobertura en todos los archivos debes hacer 2 cosas:

  • Todos los archivos del proyecto deben incluirse en [my source glob] .

  • Todos los archivos deben ser necesarios, en otras palabras, require() debe invocarse en todos los archivos del proyecto, porque es probable que estambul cambie el require() predeterminado require() para calcular la cobertura en un archivo.

Puede escribir algo como esto al comienzo del archivo de prueba:

for([all .js files in project]){ require([file]) }

Puedes usar require-dir para eso.

Y usa esto en su lugar:

var requireDir = require(''require-dir''); var dir = requireDir(''./projectFolder'', {recurse: true});

Estoy usando gulp-istanbul para generar informes de cobertura de pruebas de unidades de JavaScript a través de Gulp. ¿Hay alguna manera de configurar Estambul para generar un informe de cobertura completa de todos los archivos JS en mi flujo trago, y no solo los archivos tocados por un caso de prueba.

Estoy trabajando en un proyecto con muchos JS, pero no hay pruebas de unidades, y estamos tratando de aumentar la cobertura de las pruebas. Me gustaría tener un informe de cobertura que comience mostrando una cobertura del 0% para la mayoría de nuestros archivos, pero con el tiempo presentará un porcentaje de cobertura creciente.

gulp.task( ''test'', function () { gulp.src( [ my source glob ] ) .pipe( istanbul() ) .on( ''end'', function () { gulp.src( [ my test spec glob ] ) .pipe( mocha( { reporter: ''spec'' } ) ) .pipe( istanbul.writeReports( [ output location ] ) ); } ); } );


El gancho de Estambul se ejecuta cuando se requiere el archivo. Por lo tanto, debe requerir todos los archivos para que se incluyan en el informe de cobertura final. Puedes lograrlo inyectando un toque dentro de tu tarea y llama a require en todos los archivos seleccionados:

gulp.task( ''test'', function () { gulp.src( [ my source glob ] ) .pipe( istanbul() ) .pipe(tap(function(f) { // Make sure all files are loaded to get accurate coverage data require(f.path); })) .on( ''end'', function () { gulp.src( [ my test spec glob ] ) .pipe( mocha( { reporter: ''spec'' } ) ) .pipe( istanbul.writeReports( [ output location ] ) ); } ); } );


En realidad, ahora es mucho más simple y solo tiene que agregar includeUntested a su llamada de istanbul() .

gulp.task(''test'', function () { return gulp.src(''./assets/**/js/*.js'') // Right there .pipe(istanbul({includeUntested: true})) .on(''finish'', function () { gulp.src(''./assets/js/test/test.js'') .pipe(mocha({reporter: ''spec''})) .pipe(istanbul.writeReports({ dir: ''./assets/unit-test-coverage'', reporters: [ ''lcov'' ], reportOpts: { dir: ''./assets/unit-test-coverage''} })); }); });

Fuente: https://github.com/SBoudrias/gulp-istanbul#includeuntested


He estado luchando con esto hoy y no he encontrado respuestas en Google. Finalmente encontré una respuesta muy similar a la respuesta aquí, pero la llamada writeReports debe ir antes de la llamada a mocha.

gulp.task(''test'', [''build''], function(done) { gulp.src(''lib/**/*.js'') .pipe($.istanbul({ includeUntested: true })) .on(''end'', function() { gulp.src([''test/helpers/**/*.coffee'', ''test/spec/**/*.coffee'']) .pipe($.istanbul.writeReports({ dir: ''./coverage'', reportOpts: { dir: ''./coverage'' }, reporters: [''html''] })).pipe($.mocha({ reporter: ''spec'', require: ''coffee-script/register'' })); }); });

Hay un boleto relacionado con esto que encontré referenciado en el código Gulp-Estambul justo antes de algo de magia vudú para hacer que las cosas funcionen: https://github.com/gotwarlost/istanbul/issues/112