アサーション API
Vitest は、@testing-library/jest-dom
ライブラリをバンドルしており、すぐに利用できる豊富な DOM アサーションを提供しています。詳細なドキュメントについては、jest-dom
の README を参照してください。
toBeDisabled
toBeEnabled
toBeEmptyDOMElement
toBeInTheDocument
toBeInvalid
toBeRequired
toBeValid
toBeVisible
toContainElement
toContainHTML
toHaveAccessibleDescription
toHaveAccessibleErrorMessage
toHaveAccessibleName
toHaveAttribute
toHaveClass
toHaveFocus
toHaveFormValues
toHaveStyle
toHaveTextContent
toHaveValue
toHaveDisplayValue
toBeChecked
toBePartiallyChecked
toHaveRole
toHaveErrorMessage
TypeScript を使用している場合、または expect
で適切な型ヒントを取得したい場合は、使用しているプロバイダーに応じて、tsconfig
に @vitest/browser/providers/playwright
または @vitest/browser/providers/webdriverio
を指定していることを確認してください。デフォルトの preview
プロバイダーを使用している場合は、代わりに @vitest/browser/matchers
を指定できます。
{
"compilerOptions": {
"types": ["@vitest/browser/matchers"]
}
}
{
"compilerOptions": {
"types": ["@vitest/browser/providers/playwright"]
}
}
{
"compilerOptions": {
"types": ["@vitest/browser/providers/webdriverio"]
}
}
ブラウザでのテストは、非同期の特性により、不安定になる可能性があります。このため、条件の判定が遅延する場合(タイムアウト、ネットワークリクエスト、アニメーションなど)でも、アサーションが成功することを保証する手段を持つことが重要です。この目的のために、Vitest は expect.poll
および expect.element
API を通じて、すぐに利用できるリトライ可能なアサーションを提供しています。
import { expect, test } from 'vitest';
import { page } from '@vitest/browser/context';
test('error banner is rendered', async () => {
triggerError();
// @testing-library は、組み込みのリトライ機能を持つクエリを提供します
// バナーがレンダリングされるまで検索を試みます
const banner = page.getByRole('alert', {
name: /error/i,
});
// Vitest は、組み込みのリトライ機能を持つ `expect.element` を提供します
// `element.textContent` が "Error!" と等しくなるまでチェックします
await expect.element(banner).toHaveTextContent('Error!');
});
TIP
expect.element
は expect.poll(() => element)
の省略形であり、全く同じ動作をします。
toHaveTextContent
およびその他の @testing-library/jest-dom
アサーションは、リトライ機構なしで通常の expect
でも利用できます。
// .textContent が `'Error!'` でない場合、すぐに失敗します
expect(banner).toHaveTextContent('Error!');