/
index.js
68 lines (57 loc) · 2.04 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
var libCoverage = require('istanbul-lib-coverage');
var libReport = require('istanbul-lib-report');
var reports = require('istanbul-reports');
var IstanbulReporter = function(baseReporterDecorator, rootConfig, logger, helper) {
var config = rootConfig.istanbulReporter || {};
var reporters = config.reporters || [];
var reportDir = config.dir;
var checkCoverage = config.checkCoverage;
// default thresholds
var thresholds = checkCoverage ? {
lines: checkCoverage.lines || 90,
functions: checkCoverage.functions || 0,
statements: checkCoverage.statements || 0,
branches: checkCoverage.branches || 0
} : undefined;
baseReporterDecorator(this);
var map;
this.onBrowserStart = function(browser) {
map = libCoverage.createCoverageMap({});
}
this.onBrowserComplete = function(browser, result) {
if (!result || !result.coverage) return;
map.merge(result.coverage);
}
this.onSpecComplete = function(browser, result) {
if (!result || !result.coverage) return;
map.merge(result.coverage);
}
this.onRunComplete = function(browsers, results) {
var context = libReport.createContext({
dir: reportDir
});
var tree = libReport.summarizers.pkg(map);
// reporters
reporters.forEach(function(reporter) {
var name = reporter.type;
var report = reports.create(name, reporter);
tree.visit(report, context);
});
// checkCoverage
if (checkCoverage) {
var summary = map.getCoverageSummary();
// ERROR: Coverage for lines (90.12%) does not meet global threshold (120%)
Object.keys(thresholds).forEach(function (key) {
var coverage = summary[key].pct;
if (coverage < thresholds[key]) {
results.exitCode = 1;
console.error('ERROR: Coverage for ' + key + ' (' + coverage + '%) does not meet global threshold (' + thresholds[key] + '%)');
}
});
}
}
}
IstanbulReporter.$inject = ['baseReporterDecorator', 'config', 'logger', 'helper'];
module.exports = {
'reporter:istanbul': ['type', IstanbulReporter]
}