AngularJS中量角器测试的代码覆盖率
我正在使用量角器在我的angularJS应用程序中运行一些e2e测试(正如angularJS文档中建议的那样)。 我在谷歌上到处搜索,找不到关于如何测量量角器测试覆盖率的任何信息AngularJS中量角器测试的代码覆盖率,angularjs,integration-testing,code-coverage,protractor,end-to-end,Angularjs,Integration Testing,Code Coverage,Protractor,End To End,我正在使用量角器在我的angularJS应用程序中运行一些e2e测试(正如angularJS文档中建议的那样)。 我在谷歌上到处搜索,找不到关于如何测量量角器测试覆盖率的任何信息 我想我错过了一些东西。。。有没有办法获得量角器e2e测试的代码覆盖率报告?或者它只是单元测试的一个特性 我设法让它工作起来了,但目前这是个难题。我使用一个现有的grunt伊斯坦布尔插件来插入代码。然后我制作了一个虚拟规范,它获取“覆盖率””全局变量并将其写入文件。之后,您可以使用任何报告插件创建报告 (过于简化的)测试
我想我错过了一些东西。。。有没有办法获得量角器e2e测试的代码覆盖率报告?或者它只是单元测试的一个特性 我设法让它工作起来了,但目前这是个难题。我使用一个现有的grunt伊斯坦布尔插件来插入代码。然后我制作了一个虚拟规范,它获取“覆盖率””全局变量并将其写入文件。之后,您可以使用任何报告插件创建报告 (过于简化的)测试如下所示:
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));
});
});
});
为了补充ryanb的答案,我还没有尝试过这个方法,但您应该能够使用类似的方法来插入代码并覆盖,然后在量角器配置文件中的
jasmineNodeOpts
对象上定义onComplete
函数。在一切关闭之前,它会被调用一次
exports.config = {
// ...
jasmineNodeOpts: {
onComplete: function(){
browser.driver.executeScript("return __coverage__;").then(function(val) {
fs.writeFileSync("/path/to/coverage.json", JSON.stringify(val));
});
}
}
};
如果您使用的是grunt-您可以使用插件,它将为您完成这项工作。您必须首先插入代码,然后使用上述插件为您创建覆盖率报告。我最初尝试了daniellmb建议的onComplete方法,但如果在测试期间有多个页面加载,仅在最后获得覆盖率结果将不会包括所有结果。这里有一个要点总结了我是如何工作的,但基本上我必须创建一个报告器,在每次规范完成时将覆盖结果添加到InstanceBul收集器中,然后使用onComplete方法编写报告。我还必须使用“waitPlugin”来防止在结果写入之前退出量角器 这可以通过使用来实现。以下是流程,以及我从项目中提取的一些示例配置(未测试):
Instrument
插入代码。确保伊斯坦布尔的覆盖率变量为\uuuuuuuuuuuuuuuuuuuuuu
// 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))
});
伊斯坦布尔报告
提取报告gulpfile.js
中,将步骤3和4放入test
中,并将post-test
脚本放入package.json
,大致如下:
// In package.json:
"scripts": {
"test": "gulp concat && protractor tests/spec-e2e.conf.js",
"posttest": "istanbul report --include coverage/**/.json --dir reports/coverage cobertura"
},
依我看,代码覆盖率是针对单元测试的,而不是e2e测试。@YeLiu,你能解释一下你为什么这么想吗?你能分享一个示例
gulpfile.js
?我无法在浏览器中获取覆盖率变量。谢谢。@ezequielc用示例配置更新了答案。希望有帮助!谢谢@dag-høidahl。在我删除.pipe(伊斯坦布尔.hookRequire())
之前,没有生成插入指令的文件,就像在您的示例中一样。干杯这也适用于角度应用吗?它对我的angularjs应用程序有效,但面临Angular5应用程序的问题。@DagHøidahl如果我的项目中有很多gulpfile.js,那么哪一个是正确的配置?
// In package.json:
"scripts": {
"test": "gulp concat && protractor tests/spec-e2e.conf.js",
"posttest": "istanbul report --include coverage/**/.json --dir reports/coverage cobertura"
},