Полный 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 ]
) );
} );
} );
Ответы
Ответ 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});