diff --git a/packages/diagnostic/server/bun/socket-handler.js b/packages/diagnostic/server/bun/socket-handler.js index 5773ecc3454..4f57799b95c 100644 --- a/packages/diagnostic/server/bun/socket-handler.js +++ b/packages/diagnostic/server/bun/socket-handler.js @@ -63,6 +63,7 @@ export function buildHandler(config, state) { await config.cleanup(); debug(`Configured cleanup hook completed`); } + debug(`\n\nExiting with code ${exitCode}`); // 1. We expect all cleanup to have happened after // config.cleanup(), so exiting here should be safe. // 2. We also want to forcibly exit with a success code in this @@ -70,6 +71,8 @@ export function buildHandler(config, state) { // eslint-disable-next-line n/no-process-exit process.exit(exitCode); } + } else { + console.log(`Waiting for ${state.expected - state.completed} more browsers to finish`); } break; diff --git a/packages/diagnostic/server/reporters/default.js b/packages/diagnostic/server/reporters/default.js index 0c980474f95..df9eac22b4c 100644 --- a/packages/diagnostic/server/reporters/default.js +++ b/packages/diagnostic/server/reporters/default.js @@ -1,6 +1,7 @@ import chalk from 'chalk'; import fs from 'fs'; import path from 'path'; +import { exit } from 'process'; const SLOW_TEST_COUNT = 50; const DEFAULT_TIMEOUT = 8_000; @@ -184,6 +185,13 @@ export default class CustomDotReporter { ) ); } + if (this.globalFailures.length) { + this.write( + chalk.red( + `\n\n${this.globalFailures.length} Global Failures were detected.. Complete stack traces for failures will print at the end.` + ) + ); + } this.write(`\n\n`); this.reportPendingTests(); @@ -212,9 +220,10 @@ export default class CustomDotReporter { )} ms\n${HEADER_STR}\n\n` ); + const exitCode = this.globalFailures.length || this.failedTests.length ? 1 : 0; this.clearState(); - return this.failedTests.length ? 1 : 0; + return exitCode; } addLauncher(data) { diff --git a/packages/diagnostic/src/internals/run.ts b/packages/diagnostic/src/internals/run.ts index 8f04f0e2a5a..f2bd70c8300 100644 --- a/packages/diagnostic/src/internals/run.ts +++ b/packages/diagnostic/src/internals/run.ts @@ -67,7 +67,20 @@ export async function runTest( } for (const hook of beforeChain) { - await hook.call(testContext, Assert); + try { + await hook.call(testContext, Assert); + } catch (err) { + Assert.pushResult({ + message: `Unexpected Test Failure in beforeEach: ${(err as Error).message}`, + stack: (err as Error).stack!, + passed: false, + actual: false, + expected: true, + }); + if (!Config.params.tryCatch.value) { + throw err; + } + } } try { @@ -91,7 +104,21 @@ export async function runTest( } } finally { for (const hook of afterChain) { - await hook.call(testContext, Assert); + try { + await hook.call(testContext, Assert); + } catch (e) { + Assert.pushResult({ + message: `Unexpected Test Failure in afterEach: ${(e as Error).message}`, + stack: (e as Error).stack!, + passed: false, + actual: false, + expected: true, + }); + if (!Config.params.tryCatch.value) { + // eslint-disable-next-line no-unsafe-finally + throw e; + } + } } Assert._finalize();