Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 358a3a6

Browse files
authoredMay 13, 2024
fix incomplete coverage reports on macos (microsoft#212639)
* eng: fix incomplete coverage reports on macos Wait for stdout to drain before exiting * better fix
1 parent 39fc2df commit 358a3a6

File tree

2 files changed

+31
-20
lines changed

2 files changed

+31
-20
lines changed
 

‎test/unit/electron/index.js

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -315,14 +315,18 @@ app.on('ready', () => {
315315
}
316316
});
317317

318+
const reporters = [];
319+
318320
if (args.tfs) {
319-
new mocha.reporters.Spec(runner);
320-
new MochaJUnitReporter(runner, {
321-
reporterOptions: {
322-
testsuitesTitle: `${args.tfs} ${process.platform}`,
323-
mochaFile: process.env.BUILD_ARTIFACTSTAGINGDIRECTORY ? path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${process.arch}-${args.tfs.toLowerCase().replace(/[^\w]/g, '-')}-results.xml`) : undefined
324-
}
325-
});
321+
reporters.push(
322+
new mocha.reporters.Spec(runner),
323+
new MochaJUnitReporter(runner, {
324+
reporterOptions: {
325+
testsuitesTitle: `${args.tfs} ${process.platform}`,
326+
mochaFile: process.env.BUILD_ARTIFACTSTAGINGDIRECTORY ? path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${process.arch}-${args.tfs.toLowerCase().replace(/[^\w]/g, '-')}-results.xml`) : undefined
327+
}
328+
}),
329+
);
326330
} else {
327331
// mocha patches symbols to use windows escape codes, but it seems like
328332
// Electron mangles these in its output.
@@ -334,10 +338,13 @@ app.on('ready', () => {
334338
});
335339
}
336340

337-
applyReporter(runner, args);
341+
reporters.push(applyReporter(runner, args));
338342
}
339343

340344
if (!args.dev) {
341-
ipcMain.on('all done', () => app.exit(runner.didFail ? 1 : 0));
345+
ipcMain.on('all done', async () => {
346+
await Promise.all(reporters.map(r => r.drain?.()));
347+
app.exit(runner.didFail ? 1 : 0);
348+
});
342349
}
343350
});

‎test/unit/fullJsonStreamReporter.js

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@ module.exports = class FullJsonStreamReporter extends BaseRunner {
2626
super(runner, options);
2727

2828
const total = runner.total;
29-
runner.once(EVENT_RUN_BEGIN, () => writeEvent(['start', { total }]));
30-
runner.once(EVENT_RUN_END, () => writeEvent(['end', this.stats]));
29+
runner.once(EVENT_RUN_BEGIN, () => this.writeEvent(['start', { total }]));
30+
runner.once(EVENT_RUN_END, () => this.writeEvent(['end', this.stats]));
3131

3232
// custom coverage events:
33-
runner.on('coverage init', (c) => writeEvent(['coverageInit', c]));
34-
runner.on('coverage increment', (context, coverage) => writeEvent(['coverageIncrement', { ...context, coverage }]));
33+
runner.on('coverage init', (c) => this.writeEvent(['coverageInit', c]));
34+
runner.on('coverage increment', (context, coverage) => this.writeEvent(['coverageIncrement', { ...context, coverage }]));
3535

36-
runner.on(EVENT_TEST_BEGIN, test => writeEvent(['testStart', clean(test)]));
37-
runner.on(EVENT_TEST_PASS, test => writeEvent(['pass', clean(test)]));
36+
runner.on(EVENT_TEST_BEGIN, test => this.writeEvent(['testStart', clean(test)]));
37+
runner.on(EVENT_TEST_PASS, test => this.writeEvent(['pass', clean(test)]));
3838
runner.on(EVENT_TEST_FAIL, (test, err) => {
3939
test = clean(test);
4040
test.actual = err.actual;
@@ -44,14 +44,18 @@ module.exports = class FullJsonStreamReporter extends BaseRunner {
4444
test.snapshotPath = err.snapshotPath;
4545
test.err = err.message;
4646
test.stack = err.stack || null;
47-
writeEvent(['fail', test]);
47+
this.writeEvent(['fail', test]);
4848
});
4949
}
50-
};
5150

52-
function writeEvent(event) {
53-
process.stdout.write(JSON.stringify(event) + '\n');
54-
}
51+
drain() {
52+
return Promise.resolve(this.lastEvent);
53+
}
54+
55+
writeEvent(event) {
56+
this.lastEvent = new Promise(r => process.stdout.write(JSON.stringify(event) + '\n', r));
57+
}
58+
};
5559

5660
const clean = test => ({
5761
title: test.title,

0 commit comments

Comments
 (0)
Please sign in to comment.