Playwright の設定
デフォルトでは、TypeScript はプロバイダオプションや追加の expect
プロパティを認識しません。TypeScript がカスタムオプションの定義を認識できるように、@vitest/browser/providers/playwright
を参照するよう設定してください。
/// <reference types="@vitest/browser/providers/playwright" />
または、tsconfig.json
ファイルの compilerOptions.types
フィールドに追加することも可能です。このフィールドに何かを指定した場合、@types/*
パッケージの自動読み込みが無効になる点にご注意ください。
{
"compilerOptions": {
"types": ["@vitest/browser/providers/playwright"]
}
}
Vitest は、同じファイル内のすべてのテストを実行するために、単一のページを開きます。instances
プロパティ内で launch
、connect
、context
の各プロパティを設定できます。
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
browser: {
instances: [
{
browser: 'firefox',
launch: {},
connect: {},
context: {},
},
],
},
},
})
WARNING
Vitest 3 より前では、これらのオプションは test.browser.providerOptions
プロパティにありました。
export default defineConfig({
test: {
browser: {
providerOptions: {
launch: {},
context: {},
},
},
},
});
providerOptions
は instances
に置き換えられ、非推奨となりました。
launch
これらのオプションは、playwright[browser].launch
コマンドに直接渡されます。コマンドと利用可能な引数の詳細については、Playwright ドキュメントを参照してください。
WARNING
Vitest は launch.headless
オプションを無視します。代わりに、test.browser.headless
を使用してください。
--inspect
が有効になっている場合、Vitest はデバッグフラグを launch.args
に追加することにご注意ください。
connect 3.2.0+
これらのオプションは、playwright[browser].connect
コマンドに直接渡されます。コマンドと利用可能な引数の詳細については、Playwright ドキュメントを参照してください。
WARNING
このコマンドは既存の Playwright サーバに接続するため、すべての launch
オプションは無視されます。
context
Vitest は、browser.newContext()
を呼び出すことで、テストファイルごとに新しいコンテキストを作成します。この動作は、カスタム引数を指定することで設定できます。
TIP
コンテキストは、Playwright テストランナーのように すべてのテスト に対してではなく、すべてのテストファイル に対して作成される点にご注意ください。
WARNING
Vitest は、サーバが HTTPS 経由で提供されている場合には ignoreHTTPSErrors
を常に true
に設定し、MSW を介したモジュールモックをサポートするために serviceWorkers
を 'allow'
に設定します。
また、ヘッドレスモードでテストを実行した場合に設定が失われる可能性があるため、ここで指定する代わりにtest.browser.viewport
を使用することをお勧めします。
actionTimeout
3.0.0+
- デフォルト: タイムアウトなし(3.0.0 より前は 1 秒)
この値は、Playwright がすべてのアクセシビリティチェックをパスし、アクションが実際に完了するまで待機するデフォルトのタイムアウトを設定します。
アクションタイムアウトはアクションごとに設定することも可能です。
import { page, userEvent } from '@vitest/browser/context';
await userEvent.click(page.getByRole('button'), {
timeout: 1_000,
});