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

  1. Check the test log for provider init errors (missing browser binary, version mismatch).
  2. Ensure `initBrowserProvider` completed before tests that use CDP run.
  3. Reinstall/verify the provider package and browser binaries (e.g. `npx playwright install`).
  4. 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

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


AI-assisted analysis of vitest-dev/vitest@d568f8ce37 (2026-08-03). Data as JSON: /data/errors/969e7c48b76b55aa.json. Report an issue: GitHub.