fix incomplete coverage reports on macos (#212639)

* eng: fix incomplete coverage reports on macos

Wait for stdout to drain before exiting

* better fix
This commit is contained in:
Connor Peet
2024-05-13 15:27:00 -07:00
committed by GitHub
parent 39fc2dfefa
commit 358a3a65d3
2 changed files with 31 additions and 20 deletions

View File

@@ -26,15 +26,15 @@ module.exports = class FullJsonStreamReporter extends BaseRunner {
super(runner, options);
const total = runner.total;
runner.once(EVENT_RUN_BEGIN, () => writeEvent(['start', { total }]));
runner.once(EVENT_RUN_END, () => writeEvent(['end', this.stats]));
runner.once(EVENT_RUN_BEGIN, () => this.writeEvent(['start', { total }]));
runner.once(EVENT_RUN_END, () => this.writeEvent(['end', this.stats]));
// custom coverage events:
runner.on('coverage init', (c) => writeEvent(['coverageInit', c]));
runner.on('coverage increment', (context, coverage) => writeEvent(['coverageIncrement', { ...context, coverage }]));
runner.on('coverage init', (c) => this.writeEvent(['coverageInit', c]));
runner.on('coverage increment', (context, coverage) => this.writeEvent(['coverageIncrement', { ...context, coverage }]));
runner.on(EVENT_TEST_BEGIN, test => writeEvent(['testStart', clean(test)]));
runner.on(EVENT_TEST_PASS, test => writeEvent(['pass', clean(test)]));
runner.on(EVENT_TEST_BEGIN, test => this.writeEvent(['testStart', clean(test)]));
runner.on(EVENT_TEST_PASS, test => this.writeEvent(['pass', clean(test)]));
runner.on(EVENT_TEST_FAIL, (test, err) => {
test = clean(test);
test.actual = err.actual;
@@ -44,14 +44,18 @@ module.exports = class FullJsonStreamReporter extends BaseRunner {
test.snapshotPath = err.snapshotPath;
test.err = err.message;
test.stack = err.stack || null;
writeEvent(['fail', test]);
this.writeEvent(['fail', test]);
});
}
};
function writeEvent(event) {
process.stdout.write(JSON.stringify(event) + '\n');
}
drain() {
return Promise.resolve(this.lastEvent);
}
writeEvent(event) {
this.lastEvent = new Promise(r => process.stdout.write(JSON.stringify(event) + '\n', r));
}
};
const clean = test => ({
title: test.title,