Подтвердить что ты не робот

Полный Gulp Отчет о покрытии в Стамбуле

Я использую gulp -istanbul для генерации отчетов об охвате JavaScript unit test через Gulp. Есть ли способ настроить Стамбул для создания полного отчета о охвате всех JS файлов в моем потоке gulp, а не только файлы, затронутые тестовым случаем.

Я работаю над проектом с большим количеством JS, но без модульных тестов, и мы пытаемся увеличить охват тестирования. Я хотел бы получить отчет о покрытии, который начинается с показа 0% -ного покрытия для большинства наших файлов, но со временем будет увеличиваться процент покрытия.

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 ]
                ) );
        } );
} );
4b9b3361

Ответ 1

На самом деле это намного проще, и вам просто нужно добавить includeUntested к вашему вызову 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'}
          }));
      });
  });

Источник: https://github.com/SBoudrias/gulp-istanbul#includeuntested

Ответ 2

Стамбульский крючок выполняется, когда требуется файл. Таким образом, вам необходимо потребовать, чтобы все файлы были включены в окончательный отчет о покрытии. Вы можете добиться этого, введя краску в свою задачу gulp и требуя вызова для всех выбранных файлов:

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 ]
                ) );
        } );
} );

Ответ 3

Я борюсь с этим сегодня и не нашел ответов на Google. Я, наконец, придумал ответ, очень похожий на ответ здесь, но вызов writeReports должен идти до вызова мокко.

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'
        }));
    });
});

Есть билет, связанный с этим, который я нашел в коде gulp -istanbul перед маской вуду, чтобы заставить все работать: https://github.com/gotwarlost/istanbul/issues/112

Ответ 4

чтобы показать охват во всех файлах, вы должны сделать 2 вещи:

  • Все файлы в проекте должны быть включены в [my source glob].

  • Все файлы должны быть обязательными, другими словами, require() должен быть вызван во всех файлах проекта, потому что istanbul, вероятно, изменяет значение по умолчанию require(), чтобы рассчитать покрытие в файле.

Вы можете написать что-то вроде этого в начале тестового файла:

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

Вы можете использовать require-dir для этого.

И используйте вместо этого:

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