浏览器配置
我们可以通过更新 配置文件 中的 test.browser 字段来更改浏览器配置。一个简单的配置文件示例如下:
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
browser: {
enabled: true,
provider: 'playwright',
instances: [
{
browser: 'chromium',
setupFile: './chromium-setup.js',
},
],
},
},
})请参阅 "配置文件" 文章以获取不同的配置示例。
WARNING
此页面上列出的 所有选项 都位于配置中的 test 属性内:
export default defineConfig({
test: {
browser: {},
},
})browser.enabled
- 类型:
boolean - 默认值:
false - 命令行终端:
--browser,--browser.enabled=false
默认情况下在浏览器中运行所有测试。请注意,--browser 仅在我们至少有一个 browser.instances 项时有效。
browser.instances
- 类型:
BrowserConfig - 默认值:
[{ browser: name }]
定义多个浏览器设置。每个配置必须至少有一个 browser 字段。配置支持我们的提供者配置:
TIP
为了在使用内置提供者时获得更好的类型安全性,我们应该在 配置文件 中引用以下类型之一(针对我们使用的提供者):
/// <reference types="@vitest/browser/providers/playwright" />
/// <reference types="@vitest/browser/providers/webdriverio" />你可以指定大部分 配置选项 (未标记 * 图标的选项)和一些 browser 选项,如browser.testerHtmlPath。
WARNING
每个浏览器配置都从根配置继承选项:
export default defineConfig({
test: {
setupFile: ['./root-setup-file.js'],
browser: {
enabled: true,
testerHtmlPath: './custom-path.html',
instances: [
{
// 将同时具有 "root" 和 "browser" 的设置文件
setupFile: ['./browser-setup-file.js'],
// 隐式具有根配置中的 "testerHtmlPath"
// testerHtmlPath: './custom-path.html',
},
],
},
},
})在开发过程中,Vitest 仅支持一个 非无头 配置。我们可以通过在配置中指定 headless: false,或提供 --browser.headless=false 标志,或使用 --project=chromium 标志过滤项目来限制有头项目。
有关更多示例,请参阅 "多种设置" 指南。
可用的 browser 选项列表:
browser.headlessbrowser.locatorsbrowser.viewportbrowser.testerHtmlPathbrowser.screenshotDirectorybrowser.screenshotFailuresbrowser.provider
在底层,Vitest 将这些实例转换为共享单个 Vite 服务器的单独 测试项目,以获得更好的缓存性能。
browser.name 已弃用
- 类型:
string - CLI:
--browser=safari
已弃用
此 API 已弃用,并将在 Vitest 4 中移除。请改用 browser.instances 选项。
在特定浏览器中运行所有测试。不同提供者中的可能选项:
webdriverio:firefox,chrome,edge,safariplaywright:firefox,webkit,chromium- 自定义:任何将传递给提供者的字符串
browser.headless
- 类型:
boolean - 默认值:
process.env.CI - 命令行终端:
--browser.headless,--browser.headless=false
在 headless 模式下运行浏览器。如果我们在 CI 中运行 Vitest,则默认启用此模式。
browser.isolate
- 类型:
boolean - 默认值:
true - 命令行终端:
--browser.isolate,--browser.isolate=false
在单独的 iframe 中运行每个测试。
browser.testerHtmlPath
- 类型:
string
HTML 入口点的路径。可以是相对于项目根目录的路径。此文件将通过 transformIndexHtml 钩子进行处理。
browser.api
- 类型:
number | { port?, strictPort?, host? } - 默认值:
63315 - 命令行终端:
--browser.api=63315,--browser.api.port=1234, --browser.api.host=example.com
配置为浏览器提供代码的 Vite 服务器的选项。不影响 test.api 选项。默认情况下,Vitest 分配端口 63315 以避免与开发服务器冲突,允许我们同时运行两者。
browser.provider
- 类型:
'webdriverio' | 'playwright' | 'preview' | string - 默认值:
'preview' - CLI:
--browser.provider=playwright
在运行浏览器测试时使用的提供者路径。Vitest 提供了三个提供者,分别是 preview(默认)、webdriverio 和 playwright。自定义提供者应使用 default 导出,并符合以下接口规范:
export interface BrowserProvider {
name: string
supportsParallelism: boolean
getSupportedBrowsers: () => readonly string[]
beforeCommand?: (command: string, args: unknown[]) => Awaitable<void>
afterCommand?: (command: string, args: unknown[]) => Awaitable<void>
getCommandsContext: (sessionId: string) => Record<string, unknown>
openPage: (sessionId: string, url: string, beforeNavigate?: () => Promise<void>) => Promise<void>
getCDPSession?: (sessionId: string) => Promise<CDPSession>
close: () => Awaitable<void>
initialize: (
ctx: TestProject,
options: BrowserProviderInitializationOptions
) => Awaitable<void>
}高级 API
自定义提供者 API 高度实验性,并且可能在补丁版本之间发生变化。如果你只需要在浏览器中运行测试,请改用 browser.instances 选项。
browser.providerOptions 已弃用
- 类型:
BrowserProviderOptions
已弃用
此 API 已弃用,并将在 Vitest 4 中移除。请改用 browser.instances 选项。
调用 provider.initialize 时传递给提供者的选项。
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
browser: {
providerOptions: {
launch: {
devtools: true,
},
},
},
},
})TIP
为了在使用内置提供者时获得更好的类型安全性,我们应该在 配置文件 中引用以下类型之一(针对我们使用的提供者):
/// <reference types="@vitest/browser/providers/playwright" />
/// <reference types="@vitest/browser/providers/webdriverio" />browser.ui
- 类型:
boolean - 默认值:
!isCI - 命令行终端:
--browser.ui=false
是否应将 Vitest UI 注入页面。默认情况下,在开发期间注入 UI iframe。
browser.viewport
- 类型:
{ width, height } - 默认值:
414x896
默认 iframe 的视口。
browser.locators
内置 浏览器定位器 的选项。
browser.locators.testIdAttribute
- 类型:
string - 默认值:
data-testid
用于通过 getByTestId 定位器查找元素的属性。
browser.screenshotDirectory
- 类型:
string - 默认值: 测试文件目录中的
__snapshots__
相对于 root 的屏幕截图目录路径。
browser.screenshotFailures
- 类型:
boolean - 默认值:
!browser.ui
如果测试失败,Vitest 是否应截取屏幕截图。
browser.orchestratorScripts
- 类型:
BrowserScript[] - 默认值:
[]
在测试 iframe 初始化之前应注入到编排器 HTML 中的自定义脚本。此 HTML 文档仅设置 iframe,并不实际导入我们的代码。
脚本的 src 和 content 将由 Vite 插件处理。脚本应符合以下接口规范:
export interface BrowserScript {
/**
* 如果提供了 "content" 并且类型为 "module",则这将是其标识符。
*
* 如果我们使用的是 TypeScript,可以在此处添加 `.ts` 扩展名。
* @default `injected-${index}.js`
*/
id?: string
/**
* 要注入的 JavaScript 内容。如果类型为 "module",则此字符串由 Vite 插件处理。
*
* 我们可以使用 `id` 为 Vite 提供文件扩展名的提示。
*/
content?: string
/**
* 脚本的路径。此值由 Vite 解析,因此它可以是节点模块或文件路径。
*/
src?: string
/**
* 脚本是否应异步加载。
*/
async?: boolean
/**
* 脚本类型。
* @default 'module'
*/
type?: string
}browser.testerScripts
- 类型:
BrowserScript[] - 默认值:
[]
已弃用
此 API 已弃用,并将在 Vitest 4 中移除。请改用 browser.testerHtmlPath 字段。
在测试环境初始化之前应注入到测试器 HTML 中的自定义脚本。这对于注入 Vitest 浏览器实现所需的 polyfill 非常有用。在几乎所有情况下,建议使用 setupFiles 代替此选项。
脚本的 src 和 content 将由 Vite 插件处理。
browser.commands
- 类型:
Record<string, BrowserCommand> - 默认值:
{ readFile, writeFile, ... }
可以从 @vitest/browser/commands 导入的自定义 命令。
browser.connectTimeout
- 类型:
number - 默认值:
60_000
超时时间(以毫秒为单位)。如果连接到浏览器的时间超过此时间,测试套件将失败。
INFO
这是浏览器与 Vitest 服务器建立 WebSocket 连接所需的时间。在正常情况下,此超时不应被触发。