pest-testing について
Laravel プロジェクトで Pest 4 のテストを作成・実行するためのスキルです。ユニット、機能、ブラウザテストの規約に加え、Pest 4 の機能を扱います。
主な機能
- 01テスト作成とディレクトリ規約
- 02Pest のテスト形式とアサーション
- 03データセットとモックの指針
- 04ブラウザテストとスモークテスト
- 05ビジュアル回帰とテスト分割
- 06アーキテクチャテスト
活用シーン
- 01プロジェクト規約に沿った Laravel テストの作成
- 02JavaScript やコンソールエラーのページ確認
- 03スクリーンショットによる表示変更の比較
- 04CI プロセス間でのテスト分割
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ coollabsio/ coolify --skill pest-testingインストール後、Claude Code で/pest-testingを入力して読み込まれたか確認します。
詳細
Pest テスト 4
ドキュメント
Pest 4 のパターンとドキュメントの詳細については、search-docs を使用してください。
基本的な使い方
テストの作成
すべてのテストは Pest を使用して記述してください。php artisan make:test --pest {name} を使用します。
{name} 引数にはパスとテスト名のみを指定し、テストスイートは含めないでください。
- 誤り:
php artisan make:test --pest Feature/SomeFeatureTestを実行すると、tests/Feature/Feature/SomeFeatureTest.phpが生成されます - 正しい例:
php artisan make:test --pest SomeControllerTestを実行すると、tests/Feature/SomeControllerTest.phpが生成されます - 誤り:
php artisan make:test --pest --unit Unit/SomeServiceTestを実行すると、tests/Unit/Unit/SomeServiceTest.phpが生成されます - 正しい例:
php artisan make:test --pest --unit SomeServiceTestを実行すると、tests/Unit/SomeServiceTest.phpが生成されます
テストの構成
- ユニットテスト/機能テスト:
tests/Featureとtests/Unitディレクトリ。 - ブラウザテスト:
tests/Browser/ディレクトリ。 - 承認なしにテストを削除しないでください。テストはアプリケーションのコアコードです。
基本的なテスト構造
Pest は test() 関数と it() 関数の両方をサポートしています。新しいテストを書く前に、同じディレクトリにある既存のテストファイルを確認し、プロジェクトの慣例に合わせてください。既存のテストで test() を使用している場合は test() を、it() を使用している場合は it() を使ってください。
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');
よくある落とし穴
- モックを使用する前に
use function Pest\Laravel\mock;をインポートし忘れる assertSuccessful()の代わりにassertStatus(200)を使用する- 繰り返し行うバリデーションテストでデータセットを使い忘れる
- 承認なしにテストを削除する
- ブラウザテストで
assertNoJavaScriptErrors()を使い忘れる make:testの{name}にFeature/またはUnit/を付ける