{"record":{"id":"080cf1510a50b04f","repo":"vitest-dev/vitest","slug":"name-browser-name-is-required-please-set-test","errorCode":null,"errorMessage":"${name}Browser name is required. Please, set `test.browser.instances[].browser` option manually.","messagePattern":"(.+?)Browser name is required\\. Please, set `test\\.browser\\.instances\\[\\]\\.browser` option manually\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/browser/src/node/utils.ts","lineNumber":75,"sourceCode":"  if (config.browser.screenshotDirectory) {\n    return resolve(\n      config.browser.screenshotDirectory,\n      relative(config.root, dir),\n      base,\n      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)","sourceCodeStart":57,"sourceCodeEnd":93,"githubUrl":"https://github.com/vitest-dev/vitest/blob/1fa9837ec26533512fdcad8baebf249771bd340a/packages/browser/src/node/utils.ts#L57-L93","documentation":"getBrowserProvider reads project.config.browser.name and throws if it is falsy when instances are used. Each browser instance must specify which browser it targets (chromium, firefox, webkit, edge, ...), because the provider needs a concrete target to spawn. The leading `[projectName]` is included if the project is named, to disambiguate multi-project setups.","triggerScenarios":"Configuring test.browser.instances without a `browser` field on one or more instances; constructing instances programmatically and omitting the browser name; resolving browser.name from a CLI flag that came through empty.","commonSituations":"Multi-browser matrix configs where one instance entry was copy-pasted without its browser field; environment-driven configs that conditionally set the browser and fall through to undefined; upgrading to a version that started enforcing instances[].browser.","solutions":["Set the `browser` field on every entry of test.browser.instances (e.g. 'chromium', 'firefox', 'webkit').","If you set browser.name at the top level, ensure it is not overridden to undefined inside an instance.","Validate the instances array at config load time, before Vitest starts."],"exampleFix":"// before\ntest: { browser: { instances: [ { name: 'mobile', browser: undefined } ] } }\n// after\ntest: { browser: { instances: [ { name: 'mobile', browser: 'chromium' } ] } }","handlingStrategy":"validation","validationCode":"function everyInstanceHasBrowser(instances: { browser?: string }[]): boolean {\n  return instances.every(i => typeof i.browser === 'string' && i.browser.length > 0)\n}","typeGuard":"function isBrowserName(name: unknown): name is string {\n  return typeof name === 'string' && ['chromium','firefox','webkit','edge'].includes(name)\n}","tryCatchPattern":null,"preventionTips":["Always set the `browser` field on every test.browser.instances entry.","Validate instances at config load and fail fast with a clear message.","Use TypeScript's literal-union type for browser names so omissions surface at compile time."],"tags":["browser-provider","config","instances","validation","browser"],"backgroundTag":null,"analyzedSha":"1fa9837ec26533512fdcad8baebf249771bd340a","analyzedAt":"2026-08-11T16:11:39.638Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}