From 866f449463daa253c1efcd71e14c2bcaf5f327a8 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Wed, 11 Jan 2023 17:30:39 +0100 Subject: [PATCH] feat: show error, when process.exit is called (#2643) * feat: throw error, when process.exit is called * chore: show exit error, but still exit process --- packages/vitest/src/node/pool.ts | 3 ++- packages/vitest/src/runtime/worker.ts | 7 ++----- packages/vitest/src/types/worker.ts | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/vitest/src/node/pool.ts b/packages/vitest/src/node/pool.ts index 6561b2436edd..9a86b9088e97 100644 --- a/packages/vitest/src/node/pool.ts +++ b/packages/vitest/src/node/pool.ts @@ -140,7 +140,8 @@ function createChannel(ctx: Vitest) { createBirpc<{}, WorkerRPC>( { - onWorkerExit(code) { + async onWorkerExit(error, code) { + await ctx.logger.printError(error, false, 'Unexpected Exit') process.exit(code || 1) }, snapshotSaved(snapshot) { diff --git a/packages/vitest/src/runtime/worker.ts b/packages/vitest/src/runtime/worker.ts index 20264039c600..ce9d8326be20 100644 --- a/packages/vitest/src/runtime/worker.ts +++ b/packages/vitest/src/runtime/worker.ts @@ -23,12 +23,9 @@ async function startViteNode(ctx: WorkerContext) { const processExit = process.exit - process.on('beforeExit', (code) => { - rpc().onWorkerExit(code) - }) - process.exit = (code = process.exitCode || 0): never => { - rpc().onWorkerExit(code) + const error = new Error(`process.exit called with "${code}"`) + rpc().onWorkerExit(error, code) return processExit(code) } diff --git a/packages/vitest/src/types/worker.ts b/packages/vitest/src/types/worker.ts index 17a121d80da4..e08575a2c2b5 100644 --- a/packages/vitest/src/types/worker.ts +++ b/packages/vitest/src/types/worker.ts @@ -27,7 +27,7 @@ export interface WorkerRPC { getSourceMap: (id: string, force?: boolean) => Promise onFinished: (files: File[], errors?: unknown[]) => void - onWorkerExit: (code?: number) => void + onWorkerExit: (error: unknown, code?: number) => void onPathsCollected: (paths: string[]) => void onUserConsoleLog: (log: UserConsoleLog) => void onUnhandledRejection: (err: unknown) => void