Skip to content

Instantly share code, notes, and snippets.

@dima117
Last active May 11, 2017 20:24
Show Gist options
  • Save dima117/f3922692463d1a363ca992e7183700dd to your computer and use it in GitHub Desktop.
Save dima117/f3922692463d1a363ca992e7183700dd to your computer and use it in GitHub Desktop.
const walk = require('@bem/walk');
const config = require('bem-config')();
const istanbul = require('istanbul').utils;
const _ = require('lodash');
function getCoverage(level) {
const files = {};
return new Promise(function(resolve, reject) {
walk([level], { levels: config.levelMapSync() })
.on('data', filterFiles)
.on('error', err => { reject(err); } )
.on('end', () => { resolve(files); });
function filterFiles(file) {
if (file.cell.tech != 'test-result.json') return;
let blockName = file.cell.entity.block;
let obj = require(file.path);
if (!obj.coverage) return;
let coverage = istanbul.summarizeCoverage(obj.coverage);
delete coverage.linesCovered;
files[blockName] = coverage;
}
});
}
function getPct(coverage) {
if (!coverage || !coverage.statements) return 0;
return coverage.statements.pct || 0;
}
Promise.all([
getCoverage('/Users/dima117a/projects/test.bundles'),
getCoverage('/Users/dima117a/projects/test.bundles2')
]).then(function([obj1, obj2]) {
var keys = _.uniq(Object.keys(obj1).concat(Object.keys(obj2)));
var diffs = keys
.map(function(blockName){
let coverage1 = obj1[blockName];
let coverage2 = obj2[blockName];
let pct1 = getPct(coverage1);
let pct2 = getPct(coverage2);
let diff = Math.abs(pct2 - pct1);
return {
block: blockName,
diff: diff,
c1: coverage1,
c2: coverage2
};
}).sort(function(el1, el2) { return el2.diff - el1.diff });
console.log(JSON.stringify(diffs, null, 4));
});
{
"name": "aa",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"@bem/walk": "^1.0.0-2",
"bem-config": "^3.2.3",
"bem-walk": "^1.0.0-1",
"istanbul": "^0.4.5",
"lodash": "^4.17.4"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment