{"id":"aa552a344572952d","repo":"vitest-dev/vitest","slug":"browser-mode-requires-the-provider-to-always-be","errorCode":null,"errorMessage":"Browser Mode requires the \"provider\" to always be specified.","messagePattern":"Browser Mode requires the \"provider\" to always be specified\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/browser/src/node/utils.ts","lineNumber":80,"sourceCode":"      name,\n    )\n  }\n  return resolve(dir, '__screenshots__', base, name)\n}\n\nexport async function getBrowserProvider(\n  options: ResolvedBrowserOptions,\n  project: TestProject,\n): Promise<BrowserProvider> {\n  const browser = project.config.browser.name\n  const name = project.name ? `[${project.name}] ` : ''\n  if (!browser) {\n    throw new Error(\n      `${name}Browser name is required. Please, set \\`test.browser.instances[].browser\\` option manually.`,\n    )\n  }\n  if (options.provider == null) {\n    throw new Error(`Browser Mode requires the \"provider\" to always be specified.`)\n  }\n  const supportedBrowsers = options.provider.supportedBrowser || []\n  if (supportedBrowsers.length && !supportedBrowsers.includes(browser)) {\n    throw new Error(\n      `${name}Browser \"${browser}\" is not supported by the browser provider \"${\n        options.provider.name\n      }\". Supported browsers: ${supportedBrowsers.join(', ')}.`,\n    )\n  }\n  if (typeof options.provider.providerFactory !== 'function') {\n    throw new TypeError(`The \"${name}\" browser provider does not provide a \"providerFactory\" function. Received ${typeof options.provider.providerFactory}.`)\n  }\n  return options.provider.providerFactory(project)\n}\n\nexport function slash(path: string): string {\n  return path.replace(/\\\\/g, '/').replace(/\\/+/g, '/')\n}","sourceCodeStart":62,"sourceCodeEnd":98,"githubUrl":"https://github.com/vitest-dev/vitest/blob/d568f8ce3739b532d5bf2c1ee1e45e8a8a473d09/packages/browser/src/node/utils.ts#L62-L98","documentation":"Thrown by getBrowserProvider() when options.provider is null or undefined. The 'provider' option (e.g. 'playwright' or 'webdriverio') tells Vitest which driver implementation to use for launching the browser; it is mandatory whenever browser mode is active.","triggerScenarios":"Enabling test.browser without specifying test.browser.provider, or the provider resolution returning null because the provider package is not installed or failed to load.","commonSituations":"Forgetting the provider key after enabling browser mode; installing @vitest/browser but not the driver (e.g. @vitest/browser-playwright); a typo in the provider name preventing module resolution so it resolves to undefined.","solutions":["Set test.browser.provider to 'playwright' or 'webdriverio' in your vitest config.","Install the matching driver package (e.g. pnpm add -D @vitest/browser-playwright).","If the package is installed, check the provider name spelling and that node_modules is intact (rerun pnpm install)."],"exampleFix":"// before\nexport default defineConfig({\n  test: { browser: { enabled: true, instances: [{ browser: 'chromium' }] } },\n})\n// after\nexport default defineConfig({\n  test: {\n    browser: {\n      enabled: true,\n      provider: 'playwright',\n      instances: [{ browser: 'chromium' }],\n    },\n  },\n})","handlingStrategy":"validation","validationCode":"import { existsSync } from 'node:fs'\n// ensure the driver package is resolvable before running\nconst ok = ['@vitest/browser-playwright', '@vitest/browser-webdriverio']\n  .some(p => import.meta.resolve?.(p))\nif (!ok) throw new Error('Install a browser driver provider package')","typeGuard":"function hasProvider(opts: any): opts is { provider: NonNullable<any> } {\n  return opts != null && opts.provider != null\n}","tryCatchPattern":null,"preventionTips":["Set test.browser.provider in the same config block where you enable browser mode.","Install the matching @vitest/browser-* driver package alongside @vitest/browser.","Pin driver and vitest versions together to avoid resolution drift."],"tags":["browser-mode","config","provider"],"analyzedSha":"d568f8ce3739b532d5bf2c1ee1e45e8a8a473d09","analyzedAt":"2026-08-03T20:23:56.861Z","schemaVersion":2}