From 2409b11063eec4ab54860059309963d55f879a93 Mon Sep 17 00:00:00 2001 From: AriPerkkio Date: Thu, 7 Mar 2024 18:25:12 +0200 Subject: [PATCH] fix: `--inspect-brk` to pause before execution --- packages/vitest/src/runtime/inspector.ts | 27 ++++++++++++++++++++---- packages/vitest/src/runtime/worker.ts | 2 +- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/packages/vitest/src/runtime/inspector.ts b/packages/vitest/src/runtime/inspector.ts index a43f976454e8..f6adeddfc700 100644 --- a/packages/vitest/src/runtime/inspector.ts +++ b/packages/vitest/src/runtime/inspector.ts @@ -1,15 +1,17 @@ import { createRequire } from 'node:module' -import type { ResolvedConfig } from '../types' +import type { ContextRPC } from '../types' const __require = createRequire(import.meta.url) let inspector: typeof import('node:inspector') +let session: InstanceType /** * Enables debugging inside `worker_threads` and `child_process`. * Should be called as early as possible when worker/process has been set up. */ -export function setupInspect(config: ResolvedConfig) { +export function setupInspect(ctx: ContextRPC) { + const config = ctx.config const isEnabled = config.inspect || config.inspectBrk if (isEnabled) { @@ -20,8 +22,23 @@ export function setupInspect(config: ResolvedConfig) { if (!isOpen) { inspector.open() - if (config.inspectBrk) + if (config.inspectBrk) { + const firstTestFile = ctx.files[0] + + // Stop at first test file + if (firstTestFile) { + session = new inspector.Session() + session.connect() + + session.post('Debugger.enable') + session.post('Debugger.setBreakpointByUrl', { + lineNumber: 1, + url: new URL(firstTestFile, import.meta.url).href, + }) + } + inspector.waitForDebugger() + } } } @@ -32,7 +49,9 @@ export function setupInspect(config: ResolvedConfig) { const keepOpen = config.watch && (isIsolatedSingleFork || isIsolatedSingleThread) return function cleanup() { - if (isEnabled && !keepOpen && inspector) + if (isEnabled && !keepOpen && inspector) { inspector.close() + session?.disconnect() + } } } diff --git a/packages/vitest/src/runtime/worker.ts b/packages/vitest/src/runtime/worker.ts index 41a3cb9cd4a1..d31467382ddb 100644 --- a/packages/vitest/src/runtime/worker.ts +++ b/packages/vitest/src/runtime/worker.ts @@ -15,7 +15,7 @@ if (isChildProcess()) export async function run(ctx: ContextRPC) { const prepareStart = performance.now() - const inspectorCleanup = setupInspect(ctx.config) + const inspectorCleanup = setupInspect(ctx) process.env.VITEST_WORKER_ID = String(ctx.workerId) process.env.VITEST_POOL_ID = String(poolId)