Jasmine 找到获取ES6代码覆盖率报告的好方法

Jasmine 找到获取ES6代码覆盖率报告的好方法,jasmine,babeljs,systemjs,istanbul,karma-coverage,Jasmine,Babeljs,Systemjs,Istanbul,Karma Coverage,这是我的问题:在一个AngularJS项目中,我使用了Babel6ES2015+stage3+decorators、SystemJS和Karma+Jasmine 除了代码覆盖率之外,一切都没问题:我找不到一个好方法来获得ES6代码的覆盖率报告,而不是传输的ES5 我有一些限制: 没有Github npm依赖项 没有像isparta这样不推荐的项目 应该在Windows上运行是的,我知道,但我必须在Windows和GNU/Linux上运行 这个问题特别针对本地html覆盖率报告,但我还需要一种可以

这是我的问题:在一个AngularJS项目中,我使用了Babel6ES2015+stage3+decorators、SystemJS和Karma+Jasmine

除了代码覆盖率之外,一切都没问题:我找不到一个好方法来获得ES6代码的覆盖率报告,而不是传输的ES5

我有一些限制:

没有Github npm依赖项 没有像isparta这样不推荐的项目 应该在Windows上运行是的,我知道,但我必须在Windows和GNU/Linux上运行 这个问题特别针对本地html覆盖率报告,但我还需要一种可以在SonarQube中使用的格式

在这个问题上,似乎有大量的支持,特别是对于Decorators和SystemJS,因此,除了Github上的一些问题外,stackoverflow社区可能会分享一种方法来实现这一点

如果你需要一些额外的东西,你可以在Github上看到这个项目,看看相关的问题,并参考我能找到的所有相关问题和项目

关于重新映射伊斯坦布尔

以下是我的演示和绘图吞咽任务:

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))
});
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
        }));
});
业力覆盖

coverageReporter: {
            reporters: [
                {
                    type: 'json',
                    dir: 'target/coverage/',
                    subdir: '.',
                    file: 'coverage-final.json'
                }
            ]
        }
测试:重新映射吞咽任务:

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))
});
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
        }));
});
由于,我得到以下错误:

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
您可以看到相应的代码


这可能是某些映射生成或路径上的错误。。。如果你这么认为,告诉我。

因果报应+重新映射伊斯坦布尔应该很好。

谢谢你的回答。重新映射伊斯坦布尔是我的第一个想法,但是如果你看看问题中提到的github问题,这个问题会阻止生成html报告。我尝试了以下脚本:remap伊斯坦布尔-I target/coverage/coverage-final.json-o target/coverage/remap/remap.json-b./&伊斯坦布尔报告-root-target/coverage/remap-dir-target/coverage/remap/rslt html但最后没有任何文件Windows路径似乎有很多问题,从去年9月开始,我就成功地使用了“伊斯坦布尔重塑地图”。它生成html报告、lcov和Cobertura报告。你可能做错了什么。我用呼噜声。这是我的配置:var remapIstanbulConfig={build:{src:'.coverage/coverage.json',选项:{reports:{json:'.coverage/coverage.json',lcovonly:'.coverage/lcov.info',html:'.coverage/html'},useAbsolutePath:true};我在问题中为您添加了一些信息。如果你想要更多的细节,你可以看看我的项目。相信我,我尝试了很多的可能性与重新映射伊斯坦布尔,我得到这个错误每次。。。但这可能是因为一张糟糕的地图或业力报道。。。或者一堆Windows路径支持。。。我会继续调查,但如果你有一些想法,我会很乐意跟进。我用我在项目中使用的相同设置设置设置了一个基本示例,它在Windows上工作。这是一个Typescript项目,但我想这并不重要