generate について
ユーザーストーリー、URL、コンポーネントのパス、機能説明から Playwright テストを生成するスキルです。プロジェクトの規約とテンプレートを確認し、生成したテストを実行します。
主な機能
- 01説明からのテスト生成
- 02プロジェクトとテスト規約の確認
- 03シナリオに応じたテンプレート選択
- 04ロケーターとアサーションの指針
- 05必要に応じた補助ファイル作成
- 06テスト実行とカバレッジ報告
活用シーン
- 01ログインや購入フローのテスト作成
- 02コンポーネントのソースと props に基づくテスト
- 03検索・絞り込み動作のカバレッジ追加
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ alirezarezvani/ claude-skills --skill generateインストール後、Claude Code で/generateを入力して読み込まれたか確認します。
同梱ファイルpatterns.md
詳細
Playwright テストを生成する
ユーザーストーリー、URL、コンポーネント名、または機能の説明から、本番環境に対応できる Playwright テストを生成します。
入力
$ARGUMENTS にはテスト対象を指定します。例:
"ユーザーがメールアドレスとパスワードでログインできる""チェックアウトフロー""src/components/UserProfile.tsx""フィルター付きの検索ページ"
手順
1. 対象を理解する
$ARGUMENTS を解析し、以下を特定します:
- ユーザーストーリー:検証する動作を抽出します
- コンポーネントのパス:コンポーネントのソースコードを読みます
- ページ/URL:ルートとその要素を特定します
- 機能名:関連するアプリ領域に対応付けます
2. コードベースを調査する
Explore サブエージェントを使用して、コンテキストを収集します:
playwright.config.tsを読み、testDir、baseURL、projectsを確認しますtestDir内の既存テストを確認し、パターン、フィクスチャ、規約を把握します- コンポーネントのパスが指定されている場合は、コンポーネントを読み、props、状態、インタラクションを理解します
pages/内に既存のページオブジェクトがあるか確認しますfixtures/内に既存のフィクスチャがあるか確認します- 認証のセットアップ(
auth.setup.tsまたはstorageStateの設定)を確認します
3. テンプレートを選択する
このプラグイン内の templates/ で一致するパターンを確認します:
| テスト対象 | テンプレートの読み込み元 |
|---|---|
| ログイン/認証フロー | ../pw/templates/auth/login.md |
| CRUD 操作 | templates/crud/ |
| チェックアウト/決済 | templates/checkout/ |
| 検索/フィルター UI | templates/search/ |
| フォーム送信 | templates/forms/ |
| ダッシュボード/データ | templates/dashboard/ |
| 設定ページ | templates/settings/ |
| オンボーディングフロー | templates/onboarding/ |
| API エンドポイント | templates/api/ |
| アクセシビリティ | templates/accessibility/ |
テンプレートをアプリに合わせて調整し、{{placeholders}} を実際のセレクター、URL、データに置き換えます。
4. テストを生成する
以下のルールに従います:
構造:
import { test, expect } from '@playwright/test';
// Import custom fixtures if the project uses them
test.describe('Feature Name', () => {
// Group related behaviors
test('should <expected behavior>', async ({ page }) => {
// Arrange: navigate, set up state
// Act: perform user action
// Assert: verify outcome
});
});
ロケーターの優先順位(最初に機能するものを使用):
getByRole()— ボタン、リンク、見出し、フォーム要素getByLabel()— ラベルのあるフォームフィールドgetByText()— インタラクティブではないテキストコンテンツgetByPlaceholder()— プレースホルダーテキストのある入力欄getByTestId()— セマンティックな方法が使えない場合
アサーション — 常に Web ファーストにします:
// GOOD — auto-retries
await expect(page.getByRole('heading')).toBeVisible();
await expect(page.getByRole('alert')).toHaveText('Success');
// BAD — no retry
const text = await page.textContent('.msg');
expect(text).toBe('Success');
次のものは使用しないでください:
page.waitForTimeout()page.$(selector)またはpage.$$(selector)- 絶対に必要な場合を除く、単独の CSS セレクター
- ロケーターで実行できる処理に対する
page.evaluate()
必ず含めてください:
- 動作を説明する、わかりやすいテスト名
- 正常系と併せたエラーケース/エッジケースのテスト
- すべての Playwright 呼び出しへの適切な
await baseURLを基準にしたナビゲーション(page.goto('http://...')ではなくpage.goto('/'))
5. プロジェクトの規約に合わせる
- プロジェクトが TypeScript を使用している場合 →
.spec.tsを生成します - プロジェクトが JavaScript を使用している場合 →
require()インポートを使った.spec.jsを生成します - プロジェクトにページオブジェクトがある場合 → インラインロケーターの代わりに使用します
- プロジェクトにカスタムフィクスチャがある場合 → インポートして使用します
- プロジェクトにテストデータ用ディレクトリがある場合 → そこにテストデータファイルを作成します
6. 必要に応じて補助ファイルを生成する
- ページオブジェクト:テストで1ページ上の一意なロケーターを5つ以上扱う場合は、ページオブジェクトを作成します
- フィクスチャ:テストに共有セットアップ(認証、データ)が必要な場合は、フィクスチャを作成または拡張します
- テストデータ:テストで構造化データを使う場合は、
test-data/に JSON ファイルを作成します
7. 検証する
生成したテストを実行します:
npx playwright test <generated-file> --reporter=list
失敗した場合:
- エラーを読みます
- アプリではなくテストを修正します
- 再度実行します
- アプリの問題であれば、ユーザーに報告します
出力
- 生成したテストファイル(パスを含む)
- 作成した補助ファイル(ページオブジェクト、フィクスチャ、データ)
- テスト実行結果
- カバレッジに関する注記:今回テスト対象となった動作
コメント
Markdown 対応