e2e について
開発者向けの E2E テストスキルです。失敗を不安定、古いテスト、バグ、未検証に分類し、修正と報告を案内します。バグと判断する前に仕様を確認します。
主な機能
- 01テスト失敗の分類
- 02テスト環境の確認
- 03分類別の修正指針
- 04再実行と結果報告
活用シーン
- 01断続的なテスト失敗の診断
- 02意図的な変更に伴うテスト更新
- 03仕様に反する動作の修正
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ alleneubank/ claude-code --skill e2eインストール後、Claude Code で/e2eを入力して読み込まれたか確認します。
詳細
E2E テスト
失敗の分類
E2E テストの失敗は、必ず次のいずれかに分類されます。
A. 不安定(テストインフラの問題)
- 競合状態、タイミングに依存するアサーション、古くなったセレクター、待機の不足
- 症状:再試行すると成功するが、断続的に失敗する
B. 古くなっている(テストが実装に合わなくなっている)
- 意図的に変更された以前の動作をテストがアサートしている、またはセレクターが削除済みの要素を参照している
- 症状:一貫して失敗するが、アプリは正しく動作する
C. バグ(実装が仕様に一致していない)
- テストは仕様で定義された動作を正しくアサートしているが、コードが誤っている
- 検証対象となる仕様が存在する場合に限り、バグに分類します
- 仕様が存在しない場合は「未検証の失敗」に分類し、ユーザーに報告します
カテゴリ別の修正ルール
不安定なテストの修正:
waitForTimeoutを、自動で待機するロケーターに置き換えます- 壊れやすい CSS セレクターを
getByRole/getByLabel/getByTestIdに置き換えます expect()のウェブファーストアサーションを使って競合状態を修正します- モック/ルートの設定順序を修正します(ナビゲーションの前に設定します)
- 任意の遅延を追加してはいけません — 根本的な待機の問題を修正します
- アサーションをリトライループで囲んではいけません — フレームワーク組み込みのリトライを使用します
古くなったテストの修正:
- テストのアサーションを現在の(正しい)動作に合わせて更新します
- セレクターを現在の DOM/API に合わせて更新します
- ソースコードを変更してはいけません — 実装は正しく、テストが古くなっています
バグの修正:
- 想定される動作を定義している仕様のセクションを引用します
- 仕様に合わせてソースコードを修正します
- 修正を完了する前に、単体テストが必ず存在していなければなりません — 不足している場合は、まずテストを作成します(TDD)
- バグのあるコードに合わせて E2E テストのアサーションを変更してはいけません
- 仕様の裏付けなしに、API コントラクトやインターフェースを変更してはいけません
- 仕様が存在しない場合は、ユーザーに「バグですか、それとも古くなったテストですか?」と確認します
ソースコードの変更範囲
E2E テストの修正では、アプリケーションロジック、API コントラクト、データベーススキーマ、設定のデフォルト値を変更してはいけません。唯一の例外は、仕様で正しい動作が明示され、その修正を単体テストでカバーするバグ修正です。
ワークフロー
ステップ 1:テストインフラを確認する
- E2E の設定を見つけます:
playwright.config.ts、vitest.config.ts、またはプロジェクト固有の設定 package.jsonを読み、標準の E2E コマンドを確認します- 開発サーバーまたは Tilt 環境が必要かどうか、また起動中かどうかを確認します
- 仕様ファイルを見つけます:
*.spec.md、docs/*.spec.md— バグの判断における信頼できる情報源です
ステップ 2:テストを実行する
# Playwright
yarn playwright test --reporter=line
# Or project-specific
yarn test:e2e
失敗を次のように分類します。
| テスト | ファイル | エラー | カテゴリ |
|---|---|---|---|
ログインフロー | auth.spec.ts:42 | セレクターの待機がタイムアウト | 未分類 |
ステップ 3:分類する
失敗ごとに、テストファイルと、テスト対象のソースコードを読み、対応する仕様ファイルがあるか確認して、カテゴリ(不安定/古くなっている/バグ/未検証)を割り当てます。
ステップ 4:カテゴリ別に修正する
次の順序で修正を適用します:まず不安定なテスト(他のテストの妨げを取り除くため)、次に古くなったテスト、最後にバグ。
ステップ 5:再実行して報告する
## E2E Results
**Run**: `yarn test:e2e` on <date>
**Result**: X/Y passed
### Fixed
- FLAKY: `auth.spec.ts:42` - replaced waitForTimeout with getByRole wait
- OUTDATED: `profile.spec.ts:88` - updated selector after header redesign
- BUG: `transfer.spec.ts:120` - fixed amount validation per SPEC.md#transfers
### Remaining Failures
- UNVERIFIED: `settings.spec.ts:55` - no spec, needs user decision
### Unit Tests Added
- `src/transfer.test.ts` - amount validation edge cases (covers BUG fix)
非同期処理、フレークの分類、事前チェックのパターンについては、testing-best-practices を参照してください。
コメント
Markdown 対応