Protractor Coverage generiert keinen Bericht
Backend unserer App ist inPHP
und für das Frontend verwenden wirAngularJs
. Es ist uns gelungen, e2e-Tests sowohl auf lokalen als auch auf Produktionsservern mit @ durchzuführeprotractor
.
Nachdem wir viele e2e-Tests für unsere App geschrieben hatten, suchten wir nach einer Abdeckung, die der von Unit-Tests ähnelt. Nach der Suche nach viel, zum Glück finden wirhttps: //www.npmjs.com/package/grunt-protractor-coverag genau das, was wir wollten.
Ich habe Hilfe von @ genommhttp: //lkrnac.net/blog/2014/04/measuring-code-coverage-by-protractorArtikel, der wunderbar hilft, alles einzurichten. Ich habe die Konfiguration und andere Aufgaben für meine App eingerichtet, und schließlich wurde unser Code (js-Dateien) ordnungsgemäß instrumentiert. Ich habe den Rest der Dateien (HTML, Static usw.) in diesen instrumentierten Code kopiert und den korrekten Pfad für das @ angegebeproractor-config
Datei. Die Tests liefen wie zuvor, diesmal jedoch mit instrumentierten Dateien.
is zu diesem Punkt ist allesOK
. Aber wenn die Aufgabe zum Erzeugen voncoverage-report
wurde ausgeführt, wir stellten fest, dass wir @ leer hattcoverage.json
Datei{}
. Dies bedeutet, dass der Bericht mit Sicherheit leer sein wird, wenn er die zu generierende Datei liest. Soweit ich es herausgefunden habe, wird diese Datei von @ generierprotractor-coverage
grunt-Task, während Tests ausgeführt werden. Es sendet die Informationen an den Collector (Port:3001
) Verwendung einerPOST
req und während der Berichterstellung einGET
req wird an denselben Collector gesendet.
Also, was ich dachte, ist, NeinPOST
req wird zum Sammler gemacht.
var options = {
hostname: 'localhost',
port: <%=collectorPort%>,
path: '/data',
method: 'POST',
headers:{
'Content-Type':'application/json'
}
};
function saveCoverage(data){
var req = http.request(options, function(res) {
res.on('data', function (chunk) {
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
// write data to request body
req.write(JSON.stringify(data));
req.write('\n');
req.end();
}
Jedes Mal zeigt es nur wo es jede Datei hätte auflisten sollen:
Und auc, Das100
überall ist irreführend, ich habe Tests für den Quellcode durchgeführt:http: //lkrnac.net/blog/2014/04/measuring-code-coverage-by-protractor wie erklärt, aber selbst wenn es nur einen e2e-Test gibt, muss der Bericht die tatsächlichen Zahlen enthalten, anstatt ein direktes @ zu geb100
für alle
Es kann vorkommen, dass ich eine falsche Konfiguration habe oder etwas verpasst habe.
Below sind meine Dateien:
'use strict';
module.exports = function(grunt) {
// Load grunt tasks automatically
require('load-grunt-tasks')(grunt);
// Define the configuration for all the tasks
grunt.initConfig({
// Project settings
yeoman: {
// configurable paths
app: 'app',
dist: 'dist-test',
e2e: 'coverage/e2e',
instrumentedServer: 'coverage/server/instrument',
instrumentedE2E: 'coverage/e2e/instrumented'
},
// Empties folders to start fresh
clean: {
coverageE2E: {
src: ['<%= yeoman.e2e %>/'],
}
},
// Copies remaining files to places other tasks can use
copy: {
coverageE2E: {
files: [{
expand: true,
dot: true,
cwd: '<%= yeoman.app %>',
dest: '<%= yeoman.e2e %>/instrumented/app',
src: [
'**/*',
'!modules/**/*.js',
'!editor/**/*.js'
]
}, {
expand: true,
cwd: '.tmp/images',
dest: '<%= yeoman.e2e %>/instrumented/app/images',
src: ['generated/*']
}, ]
},
},
// start - code coverage settings
instrument: {
files: ['app/modules/**/*.js', 'app/editor/**/*.js'],
options: {
lazy: true,
basePath: 'coverage/e2e/instrumented/'
}
},
makeReport: {
src: '<%= yeoman.instrumentedE2E %>/*.json',
options: {
type: 'html',
dir: '<%= yeoman.e2e %>/reports',
print: 'detail',
// type: 'lcov'
// dir: 'reports'
}
},
protractor_coverage: {
options: {
configFile: 'test/e2e/protractor-config.js', // Default config file
keepAlive: true, // If false, the grunt process stops when the test fails.
noColor: false, // If true, protractor will not use colors in its output.
coverageDir: '<%= yeoman.instrumentedE2E %>',
args: {},
run: {}
},
chrome: {
options: {
args: {
baseUrl: 'https://localapp.vwo.com/v3/#/',
// Arguments passed to the command
'browser': 'chrome'
}
}
}
}
});
grunt.registerTask('default', [
'clean:coverageE2E',
'copy:coverageE2E',
'instrument',
'protractor_coverage:chrome',
'makeReport'
]);
};
Und meincoverage.json
Datei
{}