vitest-dev/vitest · error · TypeError

The "${name}" browser provider does not provide a "providerF

Error message

The "${name}" browser provider does not provide a "providerFactory" function. Received ${typeof options.provider.providerFactory}.

What it means

Thrown as a TypeError when the resolved provider object exists but its providerFactory property is not a function. providerFactory is the contract method Vitest calls to instantiate the actual driver; a non-function value means the provider module is malformed or incompatible.

Source

Thrown at packages/browser/src/node/utils.ts:91

  const name = project.name ? `[${project.name}] ` : ''
  if (!browser) {
    throw new Error(
      `${name}Browser name is required. Please, set \`test.browser.instances[].browser\` option manually.`,
    )
  }
  if (options.provider == null) {
    throw new Error(`Browser Mode requires the "provider" to always be specified.`)
  }
  const supportedBrowsers = options.provider.supportedBrowser || []
  if (supportedBrowsers.length && !supportedBrowsers.includes(browser)) {
    throw new Error(
      `${name}Browser "${browser}" is not supported by the browser provider "${
        options.provider.name
      }". Supported browsers: ${supportedBrowsers.join(', ')}.`,
    )
  }
  if (typeof options.provider.providerFactory !== 'function') {
    throw new TypeError(`The "${name}" browser provider does not provide a "providerFactory" function. Received ${typeof options.provider.providerFactory}.`)
  }
  return options.provider.providerFactory(project)
}

export function slash(path: string): string {
  return path.replace(/\\/g, '/').replace(/\/+/g, '/')
}

export function assertBrowserFileAccess(project: TestProject, path: string): void {
  const normalized = slash(path)
  if (
    !isFileLoadingAllowed(project.vite.config, normalized)
    && !isFileLoadingAllowed(project.vitest.vite.config, normalized)
  ) {
    throw new Error(
      `Access denied to "${path}". See Vite config documentation for "server.fs": https://vitejs.dev/config/server-options.html#server-fs-strict.`,
    )
  }

View on GitHub (pinned to d568f8ce37)

Solutions

  1. Ensure @vitest/browser and the driver (@vitest/browser-playwright or @vitest/browser-webdriverio) are on compatible versions (align with your vitest version).
  2. Reinstall node_modules to rule out a corrupted/partial install.
  3. If using a custom provider, export a providerFactory function from the provider object.

Example fix

// before: custom provider missing providerFactory
export default {
  name: 'my-driver',
  supportedBrowser: ['chromium'],
  // no providerFactory
}
// after
export default {
  name: 'my-driver',
  supportedBrowser: ['chromium'],
  providerFactory: (project) => new MyDriverProvider(project),
}
Defensive patterns

Strategy: type-guard

Validate before calling

// verify the resolved provider is well-formed
const provider = resolvedOptions.provider
if (!provider || typeof provider.providerFactory !== 'function') {
  throw new Error(`Provider '${provider?.name}' is incompatible (no providerFactory). Check @vitest/browser-* version.`)
}

Type guard

function isValidProvider(p: any): p is { name: string; providerFactory: Function } {
  return p != null && typeof p === 'object'
    && typeof p.providerFactory === 'function'
}

Try / catch

try {
  await getBrowserProvider(options, project)
} catch (e) {
  if (/providerFactory/i.test(String((e as Error).message))) {
    throw new Error('Provider/version mismatch — reinstall @vitest/browser-* to match vitest version')
  }
  throw e
}

Prevention

When it happens

Trigger: A provider object whose providerFactory is undefined, null, a string, etc. — i.e. the provider resolved to something that doesn't implement the required interface. The error names the received typeof.

Common situations: Version mismatch between @vitest/browser and the driver package (providerFactory was renamed/removed); a broken or partial provider import; bundling/transform issues stripping the providerFactory method; using an outdated custom provider against a newer Vitest.

Related errors


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