Skip to content

Commit

Permalink
feat: support excluding files on writing coverage reports (#275)
Browse files Browse the repository at this point in the history
  • Loading branch information
henriquemotaesteves authored and JaKXz committed Jan 21, 2019
1 parent 25509c7 commit 752be13
Show file tree
Hide file tree
Showing 3 changed files with 118 additions and 1 deletion.
12 changes: 11 additions & 1 deletion packages/istanbul-api/lib/reporter.js
Expand Up @@ -6,7 +6,8 @@ var path = require('path'),
configuration = require('./config'),
inputError = require('./input-error'),
libReport = require('istanbul-lib-report'),
libReports = require('istanbul-reports');
libReports = require('istanbul-reports'),
minimatch = require('minimatch');

function Reporter(cfg, opts) {
opts = opts || {};
Expand Down Expand Up @@ -81,6 +82,15 @@ Reporter.prototype = {
watermarks: this.config.reporting.watermarks(),
sourceFinder: sourceFinder
});

var excludes = this.config.instrumentation.excludes() || [];

coverageMap.filter(function(file) {
return !excludes.some(function(exclude) {
return minimatch(file, exclude, { dot: true });
});
});

tree = this.summarizer(coverageMap);
Object.keys(this.reports).forEach(function(name) {
var report = that.reports[name];
Expand Down
1 change: 1 addition & 0 deletions packages/istanbul-api/package.json
Expand Up @@ -37,6 +37,7 @@
"istanbul-reports": "^2.0.3",
"js-yaml": "^3.12.0",
"make-dir": "^1.3.0",
"minimatch": "^3.0.4",
"once": "^1.4.0"
},
"engines": {
Expand Down
106 changes: 106 additions & 0 deletions packages/istanbul-api/test/reporter.test.js
@@ -0,0 +1,106 @@
/* globals context, describe, it */

var assert = require('chai').assert,
configuration = require('../lib/config'),
coverage = require('istanbul-lib-coverage'),
Reporter = require('../lib/reporter');

describe('Reporter', function() {
describe('#write', function() {
context('config to exclude files is not defined', function() {
var config = configuration.loadObject();

it('does not exclude files from reports', function(done) {
var coverageMap = coverage.createCoverageMap({});
coverageMap.addFileCoverage(
coverage.createFileCoverage('/a/b/c.js')
);
coverageMap.addFileCoverage(
coverage.createFileCoverage('/d/e/f.js')
);
coverageMap.addFileCoverage(
coverage.createFileCoverage('/g/h/i.js')
);

var opts = {
summarizer: function(cm) {
assert.deepEqual(cm.files(), [
'/a/b/c.js',
'/d/e/f.js',
'/g/h/i.js'
]);
done();
}
};

var reporter = new Reporter(config, opts);

reporter.write(coverageMap);
});
});

context('config to exclude files is defined', function() {
var config = configuration.loadObject({
instrumentation: {
excludes: ['**/a/**/*.js', '**/h/**/*.js']
}
});

context('files to be excluded found', function() {
var coverageMap = coverage.createCoverageMap();
coverageMap.addFileCoverage(
coverage.createFileCoverage('/a/b/c.js')
);
coverageMap.addFileCoverage(
coverage.createFileCoverage('/d/e/f.js')
);
coverageMap.addFileCoverage(
coverage.createFileCoverage('/g/h/i.js')
);

it('excludes files from reports', function(done) {
var opts = {
summarizer: function(cm) {
assert.deepEqual(cm.files(), ['/d/e/f.js']);
done();
}
};

var reporter = new Reporter(config, opts);

reporter.write(coverageMap);
});
});

context('files to be excluded not found', function() {
var coverageMap = coverage.createCoverageMap();
coverageMap.addFileCoverage(
coverage.createFileCoverage('/x/b/c.js')
);
coverageMap.addFileCoverage(
coverage.createFileCoverage('/d/e/f.js')
);
coverageMap.addFileCoverage(
coverage.createFileCoverage('/g/x/i.js')
);

it('does not exclude files from reports', function(done) {
var opts = {
summarizer: function(cm) {
assert.deepEqual(cm.files(), [
'/x/b/c.js',
'/d/e/f.js',
'/g/x/i.js'
]);
done();
}
};

var reporter = new Reporter(config, opts);

reporter.write(coverageMap);
});
});
});
});
});

0 comments on commit 752be13

Please sign in to comment.