全面报道伊斯坦布尔报道

Sco*_*ott 14 javascript unit-testing mocha.js istanbul gulp

我正在使用gulp-istanbul通过Gulp生成JavaScript单元测试覆盖率报告.有没有办法配置伊斯坦布尔生成我的gulp流中所有JS文件的完整覆盖率报告,而不仅仅是测试用例触及的文件.

我正在开发一个包含大量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 ]
                ) );
        } );
} );
Run Code Online (Sandbox Code Playgroud)

Rom*_*aun 14

它现在实际上要简单得多,你只需添加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'}
          }));
      });
  });
Run Code Online (Sandbox Code Playgroud)

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


小智 3

要显示所有文件中的覆盖范围,您必须做两件事:

  • 项目中的所有文件都应包含在[my source glob].

  • 所有文件都必须是必需的,换句话说,必须require()对项目中的所有文件调用 ,因为 istanbul 可能会更改默认值require()以便计算文件中的覆盖范围。

您可以在测试文件的开头编写如下内容:

for([all .js files in project]){
  require([file])
}
Run Code Online (Sandbox Code Playgroud)

您可以使用require-dir来实现这一点。

并用这个代替:

var requireDir = require('require-dir');
var dir = requireDir('./projectFolder', {recurse: true});
Run Code Online (Sandbox Code Playgroud)