vitest-dev/vitest · error · Error
browser is not initialized
Error message
browser is not initialized
What it means
Internal path _openBrowserPage (project.ts:468) requires this.browser to be set before opening a browser test page. The browser field is populated during browser provider initialization (_initBrowserProvider / createClusterServer). If a browser-mode test is scheduled but the provider/server never initialized the ProjectBrowser, the page-open attempt throws.
Source
Thrown at packages/vitest/src/node/project.ts:469
* Import a file using Vite module runner.
* @param moduleId The ID of the module in Vite module graph
*/
public import<T>(moduleId: string): Promise<T> {
return this.runner.import(moduleId)
}
/** @internal */
public _getViteEnvironments(): DevEnvironment[] {
return Object.values(this.vite.environments || {})
}
/** @internal */
public async _openBrowserPage(sessionId: string, pool: {
reject: (error: Error) => void
parallel?: boolean
}): Promise<void> {
if (!this.browser) {
throw new Error(`browser is not initialized`)
}
const resolvedUrls = this.browser.vite.resolvedUrls
const origin = resolvedUrls?.local[0] ?? resolvedUrls?.network[0]
if (!origin) {
throw new Error(
`Can't find browser origin URL for project "${this.name}"`,
)
}
const url = new URL('/__vitest_test__/', origin)
url.searchParams.set('sessionId', sessionId)
const otelCarrier = this.vitest._traces.getContextCarrier()
this.vitest._browserSessions.sessionIds.add(sessionId)
const sessionPromise = this.vitest._browserSessions.createSession(
sessionId,
this,
pool,View on GitHub (pinned to d568f8ce37)
Solutions
- Ensure @vitest/browser is installed and browser.provider points to an installed provider (playwright or webdriverio).
- Verify browser.enabled is true and run via the normal vitest CLI / createVitest path so initialization completes.
- If using the programmatic API, await vitest.init() (or the equivalent server-ready step) before triggering browser test execution.
- Check earlier logs/output for a suppressed provider-load error; this message is often a downstream symptom.
Example fix
// before: custom runner schedules browser run too early await vitest.scheduleTestBrowser(spec) // after: ensure init completed await vitest.init() await vitest.runFiles(specs)
Defensive patterns
Strategy: validation
Validate before calling
if (project.isBrowserEnabled() && !project.browser) {
await project._initBrowserProvider()
}
if (!project.browser) throw new Error('Browser provider failed to initialize; check @vitest/browser install') Type guard
function browserReady(p: TestProject): boolean {
return !!p.browser && !!p.browser.provider
} Prevention
- Always install @vitest/browser and the chosen provider package.
- Use the standard vitest CLI/createVitest entry so init ordering is correct.
- Watch for provider-load errors earlier in the log; this error is downstream.
When it happens
Trigger: Calling _openBrowserPage before _initBrowserProvider resolved; browser.enabled is true but the provider failed to load (missing @vitest/browser package, provider not installed); a programmatic API call that schedules browser runs without first awaiting server init.
Common situations: Enabling browser mode in config without installing @vitest/browser; provider name typo (e.g. 'playwright' vs 'playwright.io'); a race where the worker requests a browser page before the server ready event; running browser tests through a custom runner that bypasses vitest's normal startup sequence.
Related errors
- The ${provider.name} provider does not support tracing.
- The ${context.provider.name} provider does not support traci
- provider ${context.provider.name} is not supported
- You've enabled headless mode for "preview" provider but it d
- Browser is not initialized
AI-assisted analysis of vitest-dev/vitest@d568f8ce37 (2026-08-03).
Data as JSON: /data/errors/e2dfac4faaf443c1.json.
Report an issue: GitHub.