From cf82e2c945f808975de346ceaa6833e7625ab335 Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Fri, 17 Apr 2020 18:42:12 -0700 Subject: [PATCH] fix(testrunner): await terminations before reporting test results (#1855) This way we ensure that all errors are picked up. --- utils/testrunner/TestRunner.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/utils/testrunner/TestRunner.js b/utils/testrunner/TestRunner.js index 8a4fd1859a..2c70b91810 100644 --- a/utils/testrunner/TestRunner.js +++ b/utils/testrunner/TestRunner.js @@ -395,16 +395,17 @@ class TestRunner { this._result = new Result(); this._result.runs = testRuns; + const terminationPromises = []; const handleSIGINT = () => this._terminate(TestResult.Terminated, 'SIGINT received', false, null); const handleSIGHUP = () => this._terminate(TestResult.Terminated, 'SIGHUP received', false, null); const handleSIGTERM = () => this._terminate(TestResult.Terminated, 'SIGTERM received', true, null); const handleRejection = e => { const { message, error } = this._toError('UNHANDLED PROMISE REJECTION', e); - this._terminate(TestResult.Crashed, message, false, error); + terminationPromises.push(this._terminate(TestResult.Crashed, message, false, error)); }; const handleException = e => { const { message, error } = this._toError('UNHANDLED ERROR', e); - this._terminate(TestResult.Crashed, message, false, error); + terminationPromises.push(this._terminate(TestResult.Crashed, message, false, error)); }; process.on('SIGINT', handleSIGINT); process.on('SIGHUP', handleSIGHUP); @@ -415,7 +416,7 @@ class TestRunner { let timeoutId; if (totalTimeout) { timeoutId = setTimeout(() => { - this._terminate(TestResult.Terminated, `Total timeout of ${totalTimeout}ms reached.`, true /* force */, null /* error */); + terminationPromises.push(this._terminate(TestResult.Terminated, `Total timeout of ${totalTimeout}ms reached.`, true /* force */, null /* error */)); }, totalTimeout); } await this._runDelegateCallback(this._delegate.onStarted, [testRuns]); @@ -427,6 +428,7 @@ class TestRunner { workerPromises.push(this._runWorker(initialTestRunIndex, testRuns, i)); } await Promise.all(workerPromises); + await Promise.all(terminationPromises); if (testRuns.some(run => run.isFailure())) this._result.setResult(TestResult.Failed, '');