node-jscover-coveralls
Version:
a middleware to send coverage data on phantomjs by node-jscover to coveralls
60 lines (52 loc) • 1.73 kB
JavaScript
(function () {
function createRequest() {
if (window.ActiveXObject) {
return new window.ActiveXObject('Microsoft.XMLHTTP');
}
else {
return new XMLHttpRequest();
}
}
// https://github.com/StevenLooman/mocha-lcov-reporter/blob/master/lib/lcov.js
function reportFile(filename, data) {
var lcov = '';
lcov += ('SF:' + filename + '\n');
data.forEach(function (count, num) {
if (count !== null) {
lcov += ('DA:' + num + ',' + count + '\n');
}
});
lcov += 'end_of_record\n';
return lcov;
}
var OriginalReporter = mocha._reporter;
function CoverallsReporter(runner) {
OriginalReporter.apply(this, arguments);
runner.on('end', function () {
if (window._$jscoverage) {
var cov = window._$jscoverage;
var lcov = '';
for (var filename in cov) {
var data = cov[filename];
lcov += reportFile(filename, data.lineData);
}
var request = createRequest();
console.log('send.... coverage data to coveralls.io');
request.open('post', '/node-jscover-coveralls', false);
request.setRequestHeader('content-type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.onreadystatechange = function () {
if (request.readyState === 4 && request.status === 200) {
console.log('coveralls.io returns: ' + request.responseText);
}
};
request.send('lcov=' + encodeURIComponent(lcov));
}
});
}
CoverallsReporter.prototype = OriginalReporter.prototype;
if (typeof module !== 'undefined') {
module.exports = CoverallsReporter;
} else {
mocha.reporter(CoverallsReporter);
}
})();