Skip to content

Commit 4962a70

Browse files
authoredMar 24, 2020
fix(reporter): update calls to match new API in istanbul-lib-report fix #398 (#403)
BREAKING CHANGES: major dependencies are updated
1 parent fc6e289 commit 4962a70

File tree

5 files changed

+278
-139
lines changed

5 files changed

+278
-139
lines changed
 

‎lib/in-memory-report.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
class InMemoryReport {
1+
const { ReportBase } = require('istanbul-lib-report')
2+
3+
class InMemoryReport extends ReportBase {
24
constructor (opt) {
5+
super(opt)
36
this.opt = opt
47
}
58

‎lib/reporter.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -218,11 +218,11 @@ var CoverageReporter = function (rootConfig, helper, logger, emitter) {
218218
coverageMap.merge(result.coverage)
219219
}
220220

221-
this.onRunComplete = function (browsers, results) {
221+
this.onRunComplete = async function (browsers, results) {
222222
const checkedCoverage = {}
223223

224224
for (const reporterConfig of reporters) {
225-
browsers.forEach(function (browser) {
225+
await Promise.all(browsers.map(async (browser) => {
226226
const coverageMap = coverageMaps[browser.id]
227227
if (!coverageMap) {
228228
return
@@ -231,14 +231,15 @@ var CoverageReporter = function (rootConfig, helper, logger, emitter) {
231231
const mainDir = reporterConfig.dir || config.dir
232232
const subDir = reporterConfig.subdir || config.subdir
233233
const outputPath = generateOutputPath(basePath, browser.name, mainDir, subDir)
234+
const remappedCoverageMap = await sourceMapStore.transformCoverage(coverageMap)
234235

235236
const options = helper.merge(config, reporterConfig, {
236237
dir: outputPath,
237238
subdir: '',
238239
browser: browser,
239-
emitter: emitter
240+
emitter: emitter,
241+
coverageMap: remappedCoverageMap
240242
})
241-
const remappedCoverageMap = sourceMapStore.transformCoverage(coverageMap).map
242243

243244
// If config.check is defined, check coverage levels for each browser
244245
if (hasOwnProperty.call(config, 'check') && !checkedCoverage[browser.id]) {
@@ -250,22 +251,21 @@ var CoverageReporter = function (rootConfig, helper, logger, emitter) {
250251
}
251252

252253
const context = istanbulLibReport.createContext(options)
253-
const tree = istanbulLibReport.summarizers.pkg(remappedCoverageMap)
254254
const report = reports.create(reporterConfig.type || 'html', options)
255255

256256
// // If reporting to console or in-memory skip directory creation
257257
const toDisk = !reporterConfig.type || !reporterConfig.type.match(/^(text|text-summary|in-memory)$/)
258258

259259
if (!toDisk && reporterConfig.file === undefined) {
260-
tree.visit(report, context)
260+
report.execute(context)
261261
return
262262
}
263263

264264
helper.mkdirIfNotExists(outputPath, function () {
265265
log.debug('Writing coverage to %s', outputPath)
266-
tree.visit(report, context)
266+
report.execute(context)
267267
})
268-
})
268+
}))
269269
}
270270
}
271271

‎package-lock.json

+227-87
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json

+6-6
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919
],
2020
"author": "SATO taichi <ryushi@gmail.com>",
2121
"dependencies": {
22-
"istanbul-lib-coverage": "^2.0.5",
23-
"istanbul-lib-instrument": "^3.3.0",
24-
"istanbul-lib-report": "^2.0.8",
25-
"istanbul-lib-source-maps": "^3.0.6",
26-
"istanbul-reports": "^2.2.4",
27-
"minimatch": "^3.0.0"
22+
"istanbul-lib-coverage": "^3.0.0",
23+
"istanbul-lib-instrument": "^4.0.1",
24+
"istanbul-lib-report": "^3.0.0",
25+
"istanbul-lib-source-maps": "^4.0.0",
26+
"istanbul-reports": "^3.0.0",
27+
"minimatch": "^3.0.4"
2828
},
2929
"license": "MIT",
3030
"devDependencies": {

‎test/reporter.spec.js

+33-37
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ describe('reporter', () => {
4444
let createCoverageSummaryStub = null
4545
let createCoverageMapStub = null
4646
let createContextStub = null
47-
let packageSummaryStub = null
4847
let getDefaultWatermarkStub = null
4948
let sourceMapStoreGetStub = null
5049
let globalCoverageMapGetStub = null
@@ -82,19 +81,14 @@ describe('reporter', () => {
8281
functions: [50, 80],
8382
lines: [50, 80]
8483
}
85-
mockPackageSummary = {
86-
visit: sinon.stub()
87-
}
8884
createContextStub = sinon.stub(istanbulLibReport, 'createContext')
89-
packageSummaryStub = sinon.stub(istanbulLibReport.summarizers, 'pkg')
90-
packageSummaryStub.returns(mockPackageSummary)
9185
getDefaultWatermarkStub = sinon.stub(istanbulLibReport, 'getDefaultWatermarks')
9286
getDefaultWatermarkStub.returns(mockDefaultWatermarks)
9387

9488
mockSourceMapStore = {
9589
transformCoverage: sinon.stub()
9690
}
97-
mockSourceMapStore.transformCoverage.returns({ map: mockCoverageMap })
91+
mockSourceMapStore.transformCoverage.resolves(mockCoverageMap)
9892
sourceMapStoreGetStub = sinon.stub(globalSourceMapStore, 'get')
9993
sourceMapStoreGetStub.returns(mockSourceMapStore)
10094

@@ -103,7 +97,9 @@ describe('reporter', () => {
10397
globalCoverageMapGetStub.returns(mockGlobalCoverageMap)
10498
sinon.stub(globalCoverageMap, 'add')
10599

100+
mockPackageSummary = { execute: sinon.stub() }
106101
reportCreateStub = sinon.stub(reports, 'create')
102+
reportCreateStub.returns(mockPackageSummary)
107103

108104
m = loadFile(path.join(__dirname, '/../lib/reporter.js'), mocks)
109105
})
@@ -162,22 +158,22 @@ describe('reporter', () => {
162158
expect(mockCoverageMap.merge).not.to.have.been.called
163159
})
164160

165-
it('should make reports', () => {
166-
reporter.onRunComplete(browsers)
161+
it('should make reports', async () => {
162+
await reporter.onRunComplete(browsers)
167163
expect(mkdirIfNotExistsStub).to.have.been.calledTwice
168164
const dir = rootConfig.coverageReporter.dir
169165
expect(mkdirIfNotExistsStub.getCall(0).args[0]).to.deep.equal(resolve('/base', dir, fakeChrome.name))
170166
expect(mkdirIfNotExistsStub.getCall(1).args[0]).to.deep.equal(resolve('/base', dir, fakeOpera.name))
171167
mkdirIfNotExistsStub.getCall(0).args[1]()
172168
expect(reportCreateStub).to.have.been.called
173-
expect(mockPackageSummary.visit).to.have.been.called
169+
expect(mockPackageSummary.execute).to.have.been.called
174170
const createArgs = reportCreateStub.getCall(0).args
175171
expect(createArgs[0]).to.be.equal('html')
176172
expect(createArgs[1].browser).to.be.equal(fakeChrome)
177173
expect(createArgs[1].emitter).to.be.equal(emitter)
178174
})
179175

180-
it('should support a string for the subdir option', () => {
176+
it('should support a string for the subdir option', async () => {
181177
const customConfig = helper.merge({}, rootConfig, {
182178
coverageReporter: {
183179
subdir: 'test'
@@ -188,18 +184,18 @@ describe('reporter', () => {
188184
reporter.onRunStart()
189185
browsers.forEach(b => reporter.onBrowserStart(b))
190186

191-
reporter.onRunComplete(browsers)
187+
await reporter.onRunComplete(browsers)
192188
expect(mkdirIfNotExistsStub).to.have.been.calledTwice
193189
const dir = customConfig.coverageReporter.dir
194190
const subdir = customConfig.coverageReporter.subdir
195191
expect(mkdirIfNotExistsStub.getCall(0).args[0]).to.deep.equal(resolve('/base', dir, subdir))
196192
expect(mkdirIfNotExistsStub.getCall(1).args[0]).to.deep.equal(resolve('/base', dir, subdir))
197193
mkdirIfNotExistsStub.getCall(0).args[1]()
198194
expect(reportCreateStub).to.have.been.called
199-
expect(mockPackageSummary.visit).to.have.been.called
195+
expect(mockPackageSummary.execute).to.have.been.called
200196
})
201197

202-
it('should support a function for the subdir option', () => {
198+
it('should support a function for the subdir option', async () => {
203199
const customConfig = helper.merge({}, rootConfig, {
204200
coverageReporter: {
205201
subdir: (browserName) => browserName.toLowerCase().split(/[ /-]/)[0]
@@ -210,17 +206,17 @@ describe('reporter', () => {
210206
reporter.onRunStart()
211207
browsers.forEach(b => reporter.onBrowserStart(b))
212208

213-
reporter.onRunComplete(browsers)
209+
await reporter.onRunComplete(browsers)
214210
expect(mkdirIfNotExistsStub).to.have.been.calledTwice
215211
const dir = customConfig.coverageReporter.dir
216212
expect(mkdirIfNotExistsStub.getCall(0).args[0]).to.deep.equal(resolve('/base', dir, 'chrome'))
217213
expect(mkdirIfNotExistsStub.getCall(1).args[0]).to.deep.equal(resolve('/base', dir, 'opera'))
218214
mkdirIfNotExistsStub.getCall(0).args[1]()
219215
expect(reportCreateStub).to.have.been.called
220-
expect(mockPackageSummary.visit).to.have.been.called
216+
expect(mockPackageSummary.execute).to.have.been.called
221217
})
222218

223-
it('should support a specific dir and subdir per reporter', () => {
219+
it('should support a specific dir and subdir per reporter', async () => {
224220
const customConfig = helper.merge({}, rootConfig, {
225221
coverageReporter: {
226222
dir: 'useless',
@@ -242,18 +238,18 @@ describe('reporter', () => {
242238
reporter.onRunStart()
243239
browsers.forEach(b => reporter.onBrowserStart(b))
244240

245-
reporter.onRunComplete(browsers)
241+
await reporter.onRunComplete(browsers)
246242
expect(mkdirIfNotExistsStub.callCount).to.equal(4)
247243
expect(mkdirIfNotExistsStub.getCall(0).args[0]).to.deep.equal(resolve('/base', 'reporter1', 'chrome'))
248244
expect(mkdirIfNotExistsStub.getCall(1).args[0]).to.deep.equal(resolve('/base', 'reporter1', 'opera'))
249245
expect(mkdirIfNotExistsStub.getCall(2).args[0]).to.deep.equal(resolve('/base', 'reporter2', 'CHROME'))
250246
expect(mkdirIfNotExistsStub.getCall(3).args[0]).to.deep.equal(resolve('/base', 'reporter2', 'OPERA'))
251247
mkdirIfNotExistsStub.getCall(0).args[1]()
252248
expect(reportCreateStub).to.have.been.called
253-
expect(mockPackageSummary.visit).to.have.been.called
249+
expect(mockPackageSummary.execute).to.have.been.called
254250
})
255251

256-
it('should fallback to the default dir/subdir if not provided', () => {
252+
it('should fallback to the default dir/subdir if not provided', async () => {
257253
const customConfig = helper.merge({}, rootConfig, {
258254
coverageReporter: {
259255
dir: 'defaultdir',
@@ -273,48 +269,48 @@ describe('reporter', () => {
273269
reporter.onRunStart()
274270
browsers.forEach(b => reporter.onBrowserStart(b))
275271

276-
reporter.onRunComplete(browsers)
272+
await reporter.onRunComplete(browsers)
277273
expect(mkdirIfNotExistsStub.callCount).to.equal(4)
278274
expect(mkdirIfNotExistsStub.getCall(0).args[0]).to.deep.equal(resolve('/base', 'reporter1', 'defaultsubdir'))
279275
expect(mkdirIfNotExistsStub.getCall(1).args[0]).to.deep.equal(resolve('/base', 'reporter1', 'defaultsubdir'))
280276
expect(mkdirIfNotExistsStub.getCall(2).args[0]).to.deep.equal(resolve('/base', 'defaultdir', 'CHROME'))
281277
expect(mkdirIfNotExistsStub.getCall(3).args[0]).to.deep.equal(resolve('/base', 'defaultdir', 'OPERA'))
282278
mkdirIfNotExistsStub.getCall(0).args[1]()
283279
expect(reportCreateStub).to.have.been.called
284-
expect(mockPackageSummary.visit).to.have.been.called
280+
expect(mockPackageSummary.execute).to.have.been.called
285281
})
286282

287-
it('should not create directory if reporting text* to console', () => {
283+
it('should not create directory if reporting text* to console', async () => {
288284
const run = () => {
289285
reporter = new m.CoverageReporter(rootConfig, mockHelper, mockLogger)
290286
reporter.onRunStart()
291287
browsers.forEach(b => reporter.onBrowserStart(b))
292-
reporter.onRunComplete(browsers)
288+
return reporter.onRunComplete(browsers)
293289
}
294290

295291
rootConfig.coverageReporter.reporters = [
296292
{ type: 'text' },
297293
{ type: 'text-summary' }
298294
]
299-
run()
295+
await run()
300296
expect(mkdirIfNotExistsStub).not.to.have.been.called
301297
})
302298

303-
it('should create directory if reporting text* to file', () => {
299+
it('should create directory if reporting text* to file', async () => {
304300
const run = () => {
305301
reporter = new m.CoverageReporter(rootConfig, mockHelper, mockLogger)
306302
reporter.onRunStart()
307303
browsers.forEach(b => reporter.onBrowserStart(b))
308-
reporter.onRunComplete(browsers)
304+
return reporter.onRunComplete(browsers)
309305
}
310306

311307
rootConfig.coverageReporter.reporters = [{ type: 'text', file: 'file' }]
312-
run()
308+
await run()
313309
expect(mkdirIfNotExistsStub).to.have.been.calledTwice
314310

315311
mkdirIfNotExistsStub.resetHistory()
316312
rootConfig.coverageReporter.reporters = [{ type: 'text-summary', file: 'file' }]
317-
run()
313+
await run()
318314
expect(mkdirIfNotExistsStub).to.have.been.calledTwice
319315
})
320316

@@ -370,7 +366,7 @@ describe('reporter', () => {
370366
expect(globalCoverageMapGetStub).not.to.have.been.called
371367
})
372368

373-
it('should pass watermarks to istanbul', () => {
369+
it('should pass watermarks to istanbul', async () => {
374370
const watermarks = {
375371
statements: [10, 20],
376372
branches: [30, 40],
@@ -395,15 +391,15 @@ describe('reporter', () => {
395391
reporter = new m.CoverageReporter(customConfig, mockHelper, mockLogger)
396392
reporter.onRunStart()
397393
browsers.forEach(b => reporter.onBrowserStart(b))
398-
reporter.onRunComplete(browsers)
394+
await reporter.onRunComplete(browsers)
399395

400396
expect(createContextStub).to.have.been.called
401397
expect(reportCreateStub).to.have.been.called
402398
const options = reportCreateStub.getCall(0)
403399
expect(options.args[1].watermarks).to.deep.equal(watermarks)
404400
})
405401

406-
it('should merge with istanbul default watermarks', () => {
402+
it('should merge with istanbul default watermarks', async () => {
407403
const watermarks = {
408404
statements: [10, 20],
409405
lines: [70, 80]
@@ -426,7 +422,7 @@ describe('reporter', () => {
426422
reporter = new m.CoverageReporter(customConfig, mockHelper, mockLogger)
427423
reporter.onRunStart()
428424
browsers.forEach(b => reporter.onBrowserStart(b))
429-
reporter.onRunComplete(browsers)
425+
await reporter.onRunComplete(browsers)
430426

431427
expect(createContextStub).to.have.been.called
432428
expect(reportCreateStub).to.have.been.called
@@ -437,7 +433,7 @@ describe('reporter', () => {
437433
expect(options.args[1].watermarks.lines).to.deep.equal(watermarks.lines)
438434
})
439435

440-
it('should log errors on low coverage and fail the build', () => {
436+
it('should log errors on low coverage and fail the build', async () => {
441437
const customConfig = helper.merge({}, rootConfig, {
442438
coverageReporter: {
443439
check: {
@@ -472,13 +468,13 @@ describe('reporter', () => {
472468
reporter = new m.CoverageReporter(customConfig, mockHelper, customLogger)
473469
reporter.onRunStart()
474470
browsers.forEach(b => reporter.onBrowserStart(b))
475-
reporter.onRunComplete(browsers, results)
471+
await reporter.onRunComplete(browsers, results)
476472

477473
expect(spy1).to.have.been.called
478474
expect(results.exitCode).to.not.equal(0)
479475
})
480476

481-
it('should not log errors on sufficient coverage and not fail the build', () => {
477+
it('should not log errors on sufficient coverage and not fail the build', async () => {
482478
const customConfig = helper.merge({}, rootConfig, {
483479
coverageReporter: {
484480
check: {
@@ -513,7 +509,7 @@ describe('reporter', () => {
513509
reporter = new m.CoverageReporter(customConfig, mockHelper, customLogger)
514510
reporter.onRunStart()
515511
browsers.forEach(b => reporter.onBrowserStart(b))
516-
reporter.onRunComplete(browsers, results)
512+
await reporter.onRunComplete(browsers, results)
517513

518514
expect(spy1).to.not.have.been.called
519515

0 commit comments

Comments
 (0)
Please sign in to comment.