pest-testing について
Pest Testing 4は、Pest 4を使うLaravelプロジェクト向けのテストスキルです。テストの作成、変更、デバッグを行う開発者を対象に、ユニット、ブラウザー、スモーク、ビジュアル回帰、分割実行、アーキテクチャテストを扱います。
主な機能
- 01Pestテストの作成と整理のガイド
- 02テストコマンドとアサーションの案内
- 03ブラウザーテストとスモークテスト
- 04ビジュアル回帰とテスト分割への対応
- 05アーキテクチャテストの実践
活用シーン
- 01Laravelの機能に対するテスト作成
- 02失敗したテストのデバッグや既存テストの変更
- 03ブラウザーページや操作の検証
- 04テストの分割実行やアーキテクチャ規則の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ spatie/ freek.dev --skill pest-testingインストール後、Claude Code で/pest-testingを入力して読み込まれたか確認します。
詳細
Pest Testing 4
適用するタイミング
以下の場合にこのスキルを有効にします。
- 新しいテスト(ユニット、機能、ブラウザー)を作成するとき
- 既存のテストを変更するとき
- テストの失敗をデバッグするとき
- ブラウザーテストまたはスモークテストに取り組むとき
- アーキテクチャテストまたはビジュアルリグレッションテストを書くとき
ドキュメント
Pest 4 のパターンとドキュメントの詳細については、search-docs を使用してください。
基本的な使い方
テストの作成
すべてのテストは Pest を使用して記述する必要があります。php artisan make:test --pest {name} を使用してください。
テストの整理
- ユニット/機能テスト:
tests/Featureディレクトリとtests/Unitディレクトリ。 - ブラウザーテスト:
tests/Browser/ディレクトリ。 - 承認を得ずにテストを削除しないでください。これらはアプリケーションの中核となるコードです。
基本的なテスト構造
it('is true', function () { expect(true)->toBeTrue(); });
テストの実行
- 最終確認の前に、フィルターを使って最小限のテストを実行します:
php artisan test --compact --filter=testName。 - すべてのテストを実行します:
php artisan test --compact。 - ファイルを実行します:
php artisan test --compact tests/Feature/ExampleTest.php。
アサーション
assertStatus() の代わりに、具体的なアサーション(assertSuccessful()、assertNotFound())を使用してください。
it('returns all', function () { $this->postJson('/api/docs', [])->assertSuccessful(); });
| 使用するもの | 代わりに使用しないもの |
|---|---|
assertSuccessful() | assertStatus(200) |
assertNotFound() | assertStatus(404) |
assertForbidden() | assertStatus(403) |
モック
使用する前にモック関数をインポートします:use function Pest\Laravel\mock;
データセット
繰り返し行うテスト(バリデーションルールなど)にはデータセットを使用します。
it('has emails', function (string $email) { expect($email)->not->toBeEmpty(); })->with([ 'james' => '[email protected]', 'taylor' => '[email protected]', ]);
Pest 4 の機能
| 機能 | 目的 |
|---|---|
| ブラウザーテスト | 実際のブラウザーで完全な統合テストを実施 |
| スモークテスト | 複数のページをすばやく検証 |
| ビジュアルリグレッション | スクリーンショットを比較して視覚的な変更を検出 |
| テストのシャーディング | CI の並列実行 |
| アーキテクチャテスト | コード規約を適用 |
ブラウザーテストの例
ブラウザーテストは、完全な統合テストを実施するために実際のブラウザーで実行します。
- ブラウザーテストは
tests/Browser/に配置します。 Event::fake()、assertAuthenticated()、モデルファクトリーなどの Laravel の機能を使用します。- 各テストで状態をクリーンに保つには
RefreshDatabaseを使用します。 - ページを操作します:クリック、入力、スクロール、選択、送信、ドラッグ&ドロップ、タッチジェスチャー。
- 要望があれば、複数のブラウザー(Chrome、Firefox、Safari)でテストします。
- 要望があれば、異なるデバイス/ビューポート(iPhone 14 Pro、タブレット)でテストします。
- 必要に応じて、カラースキーム(ライトモード/ダークモード)を切り替えます。
- デバッグのために、スクリーンショットを撮るかテストを一時停止します。
it('may reset the password', function () { Notification::fake();
$this->actingAs(User::factory()->create());
$page = visit('/sign-in');
$page->assertSee('Sign In')
->assertNoJavascriptErrors()
->click('Forgot Password?')
->fill('email', '[email protected]')
->click('Send Reset Link')
->assertSee('We have emailed your password reset link!');
Notification::assertSent(ResetPassword::class);
});
スモークテスト
複数のページで JavaScript エラーが発生しないことをすばやく検証します。
$pages = visit(['/', '/about', '/contact']);
$pages->assertNoJavascriptErrors()->assertNoConsoleLogs();
ビジュアルリグレッションテスト
スクリーンショットを撮影して比較し、視覚的な変更を検出します。
テストのシャーディング
テストを複数の並列プロセスに分割し、CI の実行を高速化します。
アーキテクチャテスト
Pest 4 にはアーキテクチャテストが含まれています(Pest 3 から):
arch('controllers') ->expect('App\Http\Controllers') ->toExtendNothing() ->toHaveSuffix('Controller');
よくある落とし穴
- mock を使用する前に
use function Pest\Laravel\mock;をインポートしていない assertSuccessful()の代わりにassertStatus(200)を使用している- 繰り返しのバリデーションテストにデータセットを使い忘れている
- 承認なしでテストを削除している
- ブラウザテストで
assertNoJavascriptErrors()を忘れている