我正在angularJS應用程序中使用量角器運行一些e2e測試(在angularJS文檔中推薦)。 我已經搜索並找不到任何關於如何測量量角器測試覆蓋率的信息。AngularJS中量角器測試的代碼覆蓋率
我想我在這裏失去了一些東西......有沒有什麼辦法得到量角器e2e測試的代碼覆蓋率報告?或者它僅僅是單元測試的一個特性?
我正在angularJS應用程序中使用量角器運行一些e2e測試(在angularJS文檔中推薦)。 我已經搜索並找不到任何關於如何測量量角器測試覆蓋率的信息。AngularJS中量角器測試的代碼覆蓋率
我想我在這裏失去了一些東西......有沒有什麼辦法得到量角器e2e測試的代碼覆蓋率報告?或者它僅僅是單元測試的一個特性?
我設法讓它工作,但這是一個黑客現在。我使用現有的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));
});
});
});
爲了增加ryanb的回答,我還沒有試過,但你應該能夠使用類似gulp-istanbul儀器代碼和覆蓋default coverage variable,然後在Protractor配置文件的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-protractor-coverage插件,它會爲你做的工作。您將必須先編寫代碼,然後使用所提到的插件爲您創建覆蓋率報告。
我最初嘗試了由daniellmb建議的onComplete方法,但如果在測試過程中存在多個頁面加載,則僅在最後獲取覆蓋率結果將不會包含所有結果。這裏有一個總結我如何工作的基本要點,但基本上我必須創建一個記者,每次規格說明完成時,將記錄結果添加到instanbul收集器,然後用onComplete方法編寫報告。我還必須使用「waitPlugin」as suggested by sjelin來防止量角器在寫入結果之前退出。
這是可以實現的使用Istanbul。下面是這個過程中,與我從我們的項目中提取一些示例性配置(未測試):使用命令istanbul instrument
儀器代碼。確保伊斯坦布爾的覆蓋範圍變量爲__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))
});
配置量角器與插件protractor-istanbul-plugin。
// spec-e2e.conf.js
var istanbulPlugin = require('protractor-istanbul-plugin');
exports.config = {
// [...]
plugins: [{ inline: istanbulPlugin }]
};
運行您的測試。
istanbul report
來提取報告。這種方法適用於我,很容易與單元測試的覆蓋率報告相結合。要自動完成,我已經把第1步到我gulpfile.js
步和第3和第4的test
和posttest
腳本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"
},
IMO,代碼覆蓋率的單元測試,而不是E2E測試。 –
@YeLiu,你能解釋一下你爲什麼這麼想嗎? – eflat