vitest-dev/vitest · error · Error
Browser provider is not defined for the project "${browserSe
Error message
Browser provider is not defined for the project "${browserSession.project.name}". What it means
After resolving the session, `ensureCDPHandler` reads `browserSession.project.browser!.provider`. If the provider is undefined (init failed or hasn't run), CDP cannot be established. Unlike error 63 (a config-level check), this fires at runtime during a CDP request.
Source
Thrown at packages/browser/src/node/projectParent.ts:205
}
public readonly cdps: Map<string, BrowserServerCDPHandler> = new Map()
private cdpSessionsPromises = new Map<string, Promise<CDPSession>>()
async ensureCDPHandler(sessionId: string, rpcId: string): Promise<BrowserServerCDPHandler> {
const cachedHandler = this.cdps.get(rpcId)
if (cachedHandler) {
return cachedHandler
}
const browserSession = this.vitest._browserSessions.getSession(sessionId)
if (!browserSession) {
throw new Error(`Session "${sessionId}" not found.`)
}
const browser = browserSession.project.browser!
const provider = browser.provider
if (!provider) {
throw new Error(`Browser provider is not defined for the project "${browserSession.project.name}".`)
}
if (!provider.getCDPSession) {
throw new Error(`CDP is not supported by the provider "${provider.name}".`)
}
const session = await this.cdpSessionsPromises.get(rpcId) ?? await (async () => {
const promise = provider.getCDPSession!(sessionId).finally(() => {
this.cdpSessionsPromises.delete(rpcId)
})
this.cdpSessionsPromises.set(rpcId, promise)
return promise
})()
const rpc = (browser.state as BrowserServerState).testers.get(rpcId)
if (!rpc) {
throw new Error(`Tester RPC "${rpcId}" was not established.`)
}
View on GitHub (pinned to d568f8ce37)
Solutions
- Check the test log for provider init errors (missing browser binary, version mismatch).
- Ensure `initBrowserProvider` completed before tests that use CDP run.
- Reinstall/verify the provider package and browser binaries (e.g. `npx playwright install`).
- If init succeeded, this is likely a Vitest bug — report with a reproduction.
Example fix
// before — CDP call before provider ready
await cdp.send('Page.reload')
// after — ensure provider initialized
await project.browser.initBrowserProvider(project)
await cdp.send('Page.reload') Defensive patterns
Strategy: validation
Validate before calling
function providerReady(project: { browser?: { provider?: unknown } }): boolean {
return !!project.browser?.provider
} Type guard
const hasProvider = (p: { browser?: { provider?: unknown } }): p is { browser: { provider: object } } =>
!!p.browser?.provider Prevention
- Wait for provider init to resolve before issuing CDP calls.
- Install browser binaries (e.g. `npx playwright install`).
- Watch the test log for silent provider init failures.
When it happens
Trigger: A CDP call (`cdp.send`, `trackCdpEvent`) on a project whose `BrowserProjectBrowser.provider` is undefined — provider init failed silently, or hasn't completed before the CDP request.
Common situations: Provider failed to initialize (e.g. browser binary missing for Playwright) but the test continued; race between provider init and an early CDP call; mismatched provider package versions.
Related errors
- Session "${sessionId}" not found.
- CDP is not supported by the provider "${provider.name}".
- Tester RPC "${rpcId}" was not established.
- Page "${sessionId}" not found in ${this.browserName} browser
- Browser provider is not defined for the project "${child.pro
AI-assisted analysis of vitest-dev/vitest@d568f8ce37 (2026-08-03).
Data as JSON: /data/errors/969e7c48b76b55aa.json.
Report an issue: GitHub.