Skip to content

Commit

Permalink
Support karma-coverage-istanbul-reporter
Browse files Browse the repository at this point in the history
Closes #45
Closes #44
  • Loading branch information
black-trooper authored and caitp committed Sep 21, 2018
1 parent 2cb1070 commit c5e0927
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 6 deletions.
21 changes: 16 additions & 5 deletions lib/index.js
Expand Up @@ -9,10 +9,7 @@ var CoverallsReporter = function(rootConfig, helper, logger) {
var log = logger.create('coveralls.io');
var config = rootConfig.coverallsReporter || {};
var reporters = (rootConfig.reporters || []);
var coverage = reporters.indexOf('coverage');
if (coverage < 0 || coverage > reporters.indexOf('coveralls')) {
throw new Error("coverage reporter should precede coveralls");
}
var coverageReporter = resolve_coverage_reporter();

if (rootConfig.autoWatch) {
// Disable reporter if it would be meaningless for a particular reason,
Expand All @@ -21,7 +18,7 @@ var CoverallsReporter = function(rootConfig, helper, logger) {
return;
}

coverage = rootConfig.coverageReporter || {};
var coverage = coverageReporter || {};
reporters = coverage.reporters;
if (!helper.isDefined(reporters) || !Array.isArray(reporters) || !reporters.length)
reporters = [coverage];
Expand Down Expand Up @@ -70,6 +67,20 @@ var CoverallsReporter = function(rootConfig, helper, logger) {
}
}

function resolve_coverage_reporter() {
var coverallsIndex = reporters.indexOf('coveralls');
var coverageIndex = reporters.indexOf('coverage');
if (coverageIndex >= 0 && coverageIndex < coverallsIndex) {
return rootConfig.coverageReporter;
}

coverageIndex = reporters.indexOf('coverage-istanbul');
if (coverageIndex >= 0 && coverageIndex < coverallsIndex) {
return rootConfig.coverageIstanbulReporter;
}
throw new Error("coverage or coverage-istanbul reporter should precede coveralls");
}

function try_read_lcov(basepath, retry, done) {
var has_lcov = false;

Expand Down
84 changes: 83 additions & 1 deletion test/tests.Spec.js
Expand Up @@ -60,11 +60,20 @@ describe('Given the KarmaCoveralls Module', function () {

it('should throw an exception if "coveralls" does not precede "coverage" in the reporters list', function (done) {
expect(CoverallsReporter.bind(this, {}, {}, logger))
.to.throw(Error, /coverage reporter should precede coveralls/);
.to.throw(Error, /coverage or coverage-istanbul reporter should precede coveralls/);
expect(CoverallsReporter.bind(this, mockConfig, {}, logger))
.to.throw(Error, /coverage or coverage-istanbul reporter should precede coveralls/);
done();
});


it('should throw an exception if "coveralls" does not precede "coverage-istanbul" in the reporters list', function (done) {
mockConfig.reporters = ['coveralls','coverage-istanbul']
expect(CoverallsReporter.bind(this, mockConfig, {}, logger))
.to.throw(Error, /coverage or coverage-istanbul reporter should precede coveralls/);
done();
});

describe('when given the right parameters', function () {
beforeEach(function () {

Expand Down Expand Up @@ -154,4 +163,77 @@ describe('Given the KarmaCoveralls Module', function () {
});
});
});

describe('when given the right parameters for coverage-istanbul', function () {
beforeEach(function () {

helper = {
isDefined: function () {
return true;
}
};

logger = {
create: function () {
return {
debug: function () {
},
info: function () {
}
}
}
};

mockConfig = {
basePath: '',
autoWatch: false,
reporters: ['coverage-istanbul', 'coveralls']
};
});


it('should allow using coverageIstanbulReporter.dir', function (done) {
mockConfig.coverageIstanbulReporter = {
dir: dir,
reporters: ['lcov']
};

var result = new CoverallsReporter(mockConfig, helper, logger);
result._onExit(function () {

expect(coverallsMock.sendToCoveralls).to.have.been.called;
done();
});
});


it('should correctly merge coverage data', function (done) {
mockConfig.coverageIstanbulReporter = {
dir: dir,
reporters: ['lcov']
};

var result = new CoverallsReporter(mockConfig, helper, logger);
result._onExit(function () {
var expected = fs.readFileSync('test/expected/lcov.info');
expect(coverallsMock.convertLcovToCoveralls)
.to.have.been.calledWith(expected.toString());
done();
});
});


it('should not send missing coverage data', function (done) {
mockConfig.coverageIstanbulReporter = {
dir: 'dummy',
reporters: ['lcov']
};

var result = new CoverallsReporter(mockConfig, helper, logger);
result._onExit(function () {
expect(coverallsMock.sendToCoveralls).to.not.have.been.called;
done();
});
});
});
});

0 comments on commit c5e0927

Please sign in to comment.