0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

React + PlaywrightによるE2Eテスト

0
Posted at

React + PlaywrightによるE2Eテスト

1. E2Eテストとは

E2E(End-to-End)テストとは、実際のユーザー操作をブラウザ上で再現し、システム全体が期待通りに動作することを確認するテストです。

単体テストやコンポーネントテストとは異なり、

  • 画面表示
  • API通信
  • 画面遷移
  • データ更新

まで含めて確認します。

ユーザー
    ↓
React画面
    ↓
API
    ↓
DB
    ↓
React画面更新

2. ReactでE2Eテストする目的

Reactでは、

  • 画面表示
  • イベント処理
  • React Router
  • API通信
  • 状態更新

が正しく連携することを確認します。

例えば

ログイン
 ↓
一覧表示
 ↓
登録
 ↓
更新
 ↓
削除

一連の流れを確認できます。


3. Playwrightとは

PlaywrightはMicrosoft製のブラウザ自動操作ツールです。

実際の

  • Chrome
  • Edge
  • Firefox
  • Safari(WebKit)

でテストできます。

特徴

  • 高速
  • 並列実行
  • 自動待機(auto waiting)
  • スクリーンショット
  • 動画保存
  • Trace Viewer
  • APIテストも可能

4. テストの流れ

ブラウザ起動

↓

画面を開く

↓

ログイン

↓

ボタンを押す

↓

入力する

↓

API実行

↓

画面確認

↓

終了

await page.goto('/login');

await page.getByLabel('メールアドレス').fill('test@example.com');

await page.getByLabel('パスワード').fill('password');

await page.getByRole('button', { name: 'ログイン' }).click();

await expect(page).toHaveURL('/projects');

5. Reactでよく使うLocator

Role

getByRole()
await page.getByRole('button', {
    name: '保存'
});

推奨。


Label

getByLabel()

フォーム入力向け。

await page.getByLabel('メールアドレス')

Text

getByText()
await page.getByText('保存しました')

Placeholder

getByPlaceholder()

TestId

getByTestId()
data-testid="save-button"

Reactでは複雑な画面でよく使われます。


6. よく使う操作

クリック

await page.getByRole('button').click();

入力

await locator.fill('abc');

選択

await locator.selectOption();

チェック

await locator.check();

アップロード

await locator.setInputFiles();

7. よく使う検証

表示確認

await expect(locator).toBeVisible();

非表示

await expect(locator).toBeHidden();

有効

await expect(locator).toBeEnabled();

URL

await expect(page).toHaveURL();

件数

await expect(locator).toHaveCount(5);

文字列

await expect(locator).toContainText();

8. APIとの連携確認

ReactではAPIが重要です。

ボタン押下

↓

POST

↓

DB更新

↓

一覧更新

確認例

追加

↓

一覧に表示される

削除

削除

↓

一覧から消える

9. E2Eで確認する代表的なシナリオ

  • ログイン
  • ログアウト
  • CRUD(作成・参照・更新・削除)
  • バリデーション
  • エラー表示
  • 権限制御
  • ファイルアップロード
  • ダウンロード
  • 検索
  • ソート
  • ページング
  • モーダル
  • 通知(Snackbar)
  • 画面遷移
  • ブラウザ戻る
  • レスポンシブ表示

10. Playwrightの便利機能

自動待機

await page.click();

要素が操作可能になるまで自動で待機します。


Trace Viewer

失敗時の操作履歴を確認できます。

npx playwright show-trace

スクリーンショット

await page.screenshot();

動画保存

失敗時の再現確認に役立ちます。


並列実行

複数ブラウザで同時実行できます。


11. React開発でのE2Eテストの考え方

E2Eテストは「すべてをテストする」のではなく、ユーザーにとって重要な操作を中心に自動化することが重要です。

特に以下のようなシナリオは優先度が高くなります。

  • ユーザー登録・ログイン
  • 主要な業務フロー
  • 権限による画面や操作の違い
  • エラー時の画面表示
  • データの登録・更新・削除

一方で、細かな表示崩れやコンポーネント単体の挙動は、単体テストやコンポーネントテストで補完する方が、保守性と実行速度の面で効率的です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?