AngularJS中Protractor测试的代码覆盖率

use*_*050 10 integration-testing code-coverage end-to-end angularjs protractor

我正在使用量角器在angularJS应用程序中运行一些e2e测试(如angularJS文档中所推荐的).我已经google了,无法找到有关如何测量量角器测试覆盖率的任何信息.

我想我在这里遗漏了什么...有没有办法获得量角器e2e测试的代码覆盖率报告?或者它只是单元测试的一个功能?

Dag*_*ahl 8

这可以通过伊斯坦布尔实现.这是一个过程,我从项目中提取了一些示例配置(未经过测试):

  1. 使用命令检测代码istanbul instrument.确保istanbul的覆盖变量是__coverage__.

    // gulpfile.js
    
    gulp.task('concat', function () {
        gulp.src(PATH.src)
          // Instrument for protractor-istanbul-plugin:
          .pipe(istanbul({coverageVariable: '__coverage__'}))
          .pipe(concat('scripts.js'))
          .pipe(gulp.dest(PATH.dest))
    });
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用plugin protractor-istanbul-plugin配置Protractor .

    // spec-e2e.conf.js
    var istanbulPlugin = require('protractor-istanbul-plugin');
    
    exports.config = {
        // [...]
        plugins: [{ inline: istanbulPlugin }]
    };
    
    Run Code Online (Sandbox Code Playgroud)
  3. 运行测试.

  4. 使用提取报告istanbul report.

这种方法对我有用,并且很容易与单元测试的覆盖率报告相结合.为了实现自动化,我将步骤1放入我和脚本中的gulpfile.js步骤3和4 中,或多或少像这样:testposttestpackage.json

// In package.json:
"scripts": {
  "test": "gulp concat && protractor tests/spec-e2e.conf.js",
  "posttest": "istanbul report --include coverage/**/.json --dir reports/coverage cobertura"
},
Run Code Online (Sandbox Code Playgroud)


rya*_*anb 1

我设法让它工作,但目前它是一个黑客。我使用现有的 grunt istanbul 插件之一来检测代码。然后我制作了一个虚拟规范,它获取“覆盖率”全局变量并将其写入文件。之后,您可以使用任何报告插件创建报告。

(非常简单的)测试如下所示:

describe('Output the code coverage objects', function() {
    it('should output the coverage object.', function() {
        browser.driver.executeScript("return __coverage__;").then(function(val) {
            fs.writeFileSync("/path/to/coverage.json", JSON.stringify(val));
        });
    });
});
Run Code Online (Sandbox Code Playgroud)