From 62c795d63f333dd68eedd5f050450da01906a48b Mon Sep 17 00:00:00 2001 From: Lazizbek Ergashev Date: Fri, 7 Aug 2026 16:52:23 +0500 Subject: [PATCH] fix(browser): resolve `connectTimeout` from the project config (fix #10879) (#10880) --- packages/vitest/src/node/browser/sessions.ts | 2 +- packages/vitest/src/node/types/browser.ts | 2 +- test/unit/test/browser-sessions.test.ts | 30 ++++++++++++++++++-- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/packages/vitest/src/node/browser/sessions.ts b/packages/vitest/src/node/browser/sessions.ts index 7bfe5bc16..1f79796d6 100644 --- a/packages/vitest/src/node/browser/sessions.ts +++ b/packages/vitest/src/node/browser/sessions.ts @@ -28,7 +28,7 @@ export class BrowserSessions { let isReady = false const timeout = setTimeout(() => { defer.reject(new Error(`Failed to connect to the browser session "${sessionId}" [${project.name}] within the timeout.`)) - }, project.vitest.config.browser.connectTimeout ?? 60_000).unref() + }, project.config.browser.connectTimeout ?? 60_000).unref() const resolveIfReady = () => { if (!isConnected || !isReady) { diff --git a/packages/vitest/src/node/types/browser.ts b/packages/vitest/src/node/types/browser.ts index 4c8c2fdfd..35847d392 100644 --- a/packages/vitest/src/node/types/browser.ts +++ b/packages/vitest/src/node/types/browser.ts @@ -321,7 +321,7 @@ export interface BrowserConfigOptions { /** * Timeout for connecting to the browser - * @default 30000 + * @default 60000 */ connectTimeout?: number diff --git a/test/unit/test/browser-sessions.test.ts b/test/unit/test/browser-sessions.test.ts index 2c2c8546e..67f969ad1 100644 --- a/test/unit/test/browser-sessions.test.ts +++ b/test/unit/test/browser-sessions.test.ts @@ -2,8 +2,12 @@ import type { TestProject } from 'vitest/node' import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' import { BrowserSessions } from '../../../packages/vitest/src/node/browser/sessions' -function createProject(connectTimeout = 100) { - return { name: 'browser', vitest: { config: { browser: { connectTimeout } } } } as TestProject +function createProject(connectTimeout = 100, rootConnectTimeout = connectTimeout) { + return { + name: 'browser', + config: { browser: { connectTimeout } }, + vitest: { config: { browser: { connectTimeout: rootConnectTimeout } } }, + } as TestProject } describe('BrowserSessions', () => { @@ -52,6 +56,28 @@ describe('BrowserSessions', () => { await timeoutError }) + test('times out with the project connect timeout instead of the root one', async () => { + const sessions = new BrowserSessions() + const promise = sessions.createSession('session-id', createProject(100, 10), { reject() {} }) + + const timeoutError = expect(promise).rejects.toThrowError( + 'Failed to connect to the browser session "session-id" [browser] within the timeout.', + ) + + let rejected = false + promise.catch(() => { + rejected = true + }) + + await vi.advanceTimersByTimeAsync(11) + expect(rejected).toBe(false) + + await vi.advanceTimersByTimeAsync(90) + expect(rejected).toBe(true) + + await timeoutError + }) + test('fails the pool without waiting for the connect timeout', async () => { const sessions = new BrowserSessions() const poolReject = vi.fn() -- 2.51.2