mcpField
P
pest-testing

pest-testing

github.com/coollabsioテスト・品質65.3k56 回インストール今日更新
リポジトリ

pest-testing について

Laravel プロジェクトで Pest 4 のテストを作成・実行するためのスキルです。ユニット、機能、ブラウザテストの規約に加え、Pest 4 の機能を扱います。

主な機能

  1. 01テスト作成とディレクトリ規約
  2. 02Pest のテスト形式とアサーション
  3. 03データセットとモックの指針
  4. 04ブラウザテストとスモークテスト
  5. 05ビジュアル回帰とテスト分割
  6. 06アーキテクチャテスト

活用シーン

  1. 01プロジェクト規約に沿った Laravel テストの作成
  2. 02JavaScript やコンソールエラーのページ確認
  3. 03スクリーンショットによる表示変更の比較
  4. 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/ を付ける

コメント