找到一种获得ES6代码覆盖率报告的好方法

时间:2016-06-23 07:58:00

标签: jasmine babeljs systemjs istanbul karma-coverage

这是我的问题:在AngularJS项目中,我使用Babel 6(ES2015 + stage3 +装饰器),SystemJS和Karma + Jasmine。

一切正常,除了代码覆盖:我找不到一个很好的方法来获取ES6代码的覆盖率报告,而不是编译ES5。

我有一些限制:

  • 没有Github npm依赖
  • 没有弃用的项目(如isparta)
  • 应该在Windows上运行(是的,我知道,但我必须)和GNU / Linux

此问题特别针对本地html覆盖率报告,但我还需要一种可在SonarQube中使用的格式。

在这个问题上似乎有一个巨大的支持湖(特别是对于Decorators和SystemJS),因此,除了Github上的一些问题之外,stackoverflow社区也许可以分享一种方法来实现这一点。

如果您需要一些额外内容,您可以在Github(Sedona-Solutions/sdn-angularjs-seed)上看到此项目,并查看相关问题(Sedona-Solutions/sdn-angularjs-seed#5),并提及我可以找到的所有相关问题和项目。 / p>

关于remap-istanbul

这是我的翻译和映射gulp任务:

gulp.task('es6', function () {
  return gulp.src(paths.source, { base: 'app' })
    .pipe(plumber())
    .pipe(changed(paths.output, { extension: '.js' }))
    .pipe(sourcemaps.init())
    .pipe(babel(compilerOptions))
    .pipe(ngAnnotate({
      sourceMap: true,
      gulpWarnings: false
    }))
    .pipe(sourcemaps.write("."))
    .pipe(gulp.dest(paths.output))
});

噶覆盖

coverageReporter: {
            reporters: [
                {
                    type: 'json',
                    dir: 'target/coverage/',
                    subdir: '.',
                    file: 'coverage-final.json'
                }
            ]
        }

和测试:重新映射gulp任务:

gulp.task('test:remap', ['test'], function (done) {
    return gulp.src(paths.coverage + '/coverage-final.json')
        .pipe(remapIstanbul({
            reports: {
                'json': paths.coverage + '/coverage.json',
                'html': paths.coverage + '/html-remaped/'
            },
            fail: true,
            useAbsolutePaths: true
        }));
});

由于the first remap-istanbul issue,我收到以下错误:

C:\...\sdn-angularjs-seed\node_modules\remap-istanbul\node_modules\istanbul\lib\report\html.js:288
                    text = structuredText[startLine].text;
                                                    ^

TypeError: Cannot read property 'text' of undefined
  at C:\...\sdn-angularjs-seed\node_modules\remap-istanbul\node_modules\istanbul\lib\report\html.js:288:53

您可以看到相应的代码on github

在某些映射生成或路径上可能会出错...如果您这么认为,请告诉我。

1 个答案:

答案 0 :(得分:-1)

karma-coverage + remap-istanbul应该可以正常工作