Skip to content

Instantly share code, notes, and snippets.

@mdasberg
Created February 12, 2015 16:27
Show Gist options
  • Save mdasberg/593247a7aeb01a864d04 to your computer and use it in GitHub Desktop.
Save mdasberg/593247a7aeb01a864d04 to your computer and use it in GitHub Desktop.
Merge protractor-coverage results into one file
var grunt = require('grunt'),
mkdirp = require('mkdirp');
exports.config = {
// ---------------------------------------------------------------------------
// ------------- Use your default protractor config and override -------------
// ------------------ the onPrepare and onCleanup functions -----------------
// ---------------------------------------------------------------------------
onPrepare: function() {
require('jasmine-reporters');
browser.getCapabilities().then(function (caps) {
browser.params.browser = caps.get('browserName');
browser.params.environment = 'LOCAL';
// Create the directory for the protractor results
mkdirp('.tmp/results/protractor/' + browser.params.browser, function (err) {
if (err) {
throw new Error('Could not create directory ' + directory);
}
});
// Add the Xml Reporter
jasmine.getEnv().addReporter(
new jasmine.JUnitXmlReporter('.tmp/results/protractor/' + browser.params.browser, true, true)
);
browser.driver.manage().window().maximize();
});
},
onCleanUp: function(exitCode) {
var mergedAndUpdatedContent = '<?xml version="1.0"?>\n<testsuites>\n';
var errors = 0,
tests = 0,
failures = 0,
time = 0,
testcases = '';
grunt.file.expand('.tmp/results/protractor/' + browser.params.browser + '/*').forEach(function (file) {
var content = grunt.file.read(file);
var match = /\<testsuite.*errors="(\d*)".*tests="(\d*)".*failures="(\d*)".*time="(.*)".*timestamp.*>/g;
var match = match.exec(content);
errors = errors + Number(match[1]);
tests = tests + Number(match[2]);
failures = failures + Number(match[3]);
time = time + Number(match[4]);
content = content.replace(/\<\?xml.+\?\>/gm, '');
content = content.replace(/\<testsuites>/gm, '');
content = content.replace(/\<testsuite.*>/gm, '');
content = content.replace(/\<\/testsuite>/gm, '');
content = content.replace(/\<\/testsuites>/gm, '');
testcases = testcases.concat(content);
});
var testsuite = '<testsuite ' +
'name="' + browser.params.browser + '" ' +
'package="protractor" ' +
'tests="' + tests + '" ' +
'errors="' + errors + '" ' +
'failures="' + failures + '" ' +
'time="' + time + '">';
mergedAndUpdatedContent = mergedAndUpdatedContent.concat(testsuite);
mergedAndUpdatedContent = mergedAndUpdatedContent.concat(testcases);
mergedAndUpdatedContent = mergedAndUpdatedContent.concat('</testsuite>');
mergedAndUpdatedContent = mergedAndUpdatedContent.concat('</testsuites>');
mergedAndUpdatedContent = mergedAndUpdatedContent.replace(/^\s*[\r\n]/gm, "");
grunt.file.write('.tmp/results/protractor/protractor-' + browser.params.browser + '.xml', mergedAndUpdatedContent);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment