データセット
データセットを使用すると、テストデータの配列を定義でき、Pestは各セットに対して自動的に同じテストを実行します。これにより、異なるデータで同じテストを手動で繰り返す必要がなくなるため、時間と労力を節約できます。
1it('has emails', function (string $email) {2 expect($email)->not->toBeEmpty();3})->with(['enunomaduro@gmail.com', 'other@example.com']);
テストを実行すると、Pestはデータセットを使用するテストに、使用されたパラメータを示す情報的なテストの説明を自動的に追加し、データの理解と、テストが失敗した場合の問題の特定に役立ちます。

もちろん、配列の配列を含む配列を提供することで、複数の引数を渡すことができます。
1it('has emails', function (string $name, string $email) {2 expect($email)->not->toBeEmpty();3})->with([4 ['Nuno', 'enunomaduro@gmail.com'],5 ['Other', 'other@example.com']6]);
データセットの値に独自の記述を手動で追加するには、キーを割り当てるだけです。
1it('has emails', function (string $email) {2 expect($email)->not->toBeEmpty();3})->with([4 'james' => 'james@laravel.com',5 'taylor' => 'taylor@laravel.com',6]);
キーが追加されると、Pestはテストの説明を生成する際にそのキーを使用します。

データセットで`closures`を使用する場合、テスト関数に渡されるクロージャで引数の型を宣言する必要があることに注意してください。
1it('can sum', function (int $a, int $b, int $result) {2 expect(sum($a, $b))->toBe($result);3})->with([4 'positive numbers' => [1, 2, 3],5 'negative numbers' => [-1, -2, -3],6 'using closure' => [fn () => 1, 2, 3],7]);
バインドされたデータセット
Pestのバインドされたデータセットは、テストの`beforeEach()`メソッドの後で解決されるデータセットを取得するために使用できます。これは、`beforeEach()`メソッドによってデータベーススキーマが準備された後に、`App\Models\User`モデルのデータセットが必要になる可能性のあるLaravelアプリケーション(またはその他のPest統合)で特に役立ちます。
1it('can generate the full name of a user', function (User $user) {2 expect($user->full_name)->toBe("{$user->first_name} {$user->last_name}");3})->with([4 fn() => User::factory()->create(['first_name' => 'Nuno', 'last_name' => 'Maduro']),5 fn() => User::factory()->create(['first_name' => 'Luke', 'last_name' => 'Downing']),6 fn() => User::factory()->create(['first_name' => 'Freek', 'last_name' => 'Van Der Herten']),7]);
必要に応じて、単一の引数をテストケースにバインドできます。ただし、Pestでは、`it|test`関数の引数で完全に型指定する必要があります。
1-it('can generate the full name of a user', function ($user, $fullName) {2+it('can generate the full name of a user', function (User $user, $fullName) {3 expect($user->full_name)->toBe($fullName);4})->with([5 [fn() => User::factory()->create(['first_name' => 'Nuno', 'last_name' => 'Maduro']), 'Nuno Maduro'],6 [fn() => User::factory()->create(['first_name' => 'Luke', 'last_name' => 'Downing']), 'Luke Downing'],7 [fn() => User::factory()->create(['first_name' => 'Freek', 'last_name' => 'Van Der Herten']), 'Freek Van Der Herten'],8]);
データセットの共有
データセットを`tests/Datasets`フォルダに別々に保存することで、テストコードと容易に区別し、メインのテストファイルが混乱することを防ぐことができます。
1// tests/Unit/ExampleTest.php... 2it('has emails', function (string $email) { 3 expect($email)->not->toBeEmpty(); 4-})->with(['enunomaduro@gmail.com', 'other@example.com']); 5+})->with('emails'); 6 7// tests/Datasets/Emails.php... 8+dataset('emails', [ 9+ 'enunomaduro@gmail.com',10+ 'other@example.com'11+]);
インラインデータセットに適用されるバインドされたデータセット、記述キー、その他のルールも、共有データセットに適用できます。
スコープされたデータセット
場合によっては、データセットが特定の機能またはフォルダセットのみに関連する場合があります。このような場合、`Datasets`フォルダにグローバルにデータセットを配布するのではなく、データセットを必要とする関連フォルダ内に`Datasets.php`ファイルを作成し、データセットのスコープをそのフォルダのみに制限できます。
1// tests/Feature/Products/ExampleTest.php... 2it('has products', function (string $product) { 3 expect($product)->not->toBeEmpty(); 4})->with('products'); 5 6// tests/Feature/Products/Datasets.php... 7dataset('products', [ 8 'egg', 9 'milk'10]);
データセットの組み合わせ
**インライン**データセットと**共有**データセットの両方を使用して、複雑なデータセットを簡単に取得できます。その場合、データセットはデカルト積アプローチを使用して結合されます。
次の例では、指定されたすべての事業所が提供された曜日すべてで閉まっていることを確認します。
1dataset('days_of_the_week', [ 2 'Saturday', 3 'Sunday', 4]); 5 6test('business is closed on day', function(string $business, string $day) { 7 expect(new $business)->isClosed($day)->toBeTrue(); 8})->with([ 9 Office::class,10 Bank::class,11 School::class12])->with('days_of_the_week');
上記の例を実行すると、Pestの出力には、検証された各組み合わせの説明が含まれます。

テストの繰り返し
デバッグ目的、またはテストの安定性を確保するために、テストを複数回繰り返す必要がある場合があります。このような場合は、`repeat()`メソッドを使用して、テストを指定された回数繰り返すことができます。
1it('can repeat a test', function () {2 $result = /** Some code that may be unstable */;3 4 expect($result)->toBeTrue();5})->repeat(100); // Repeat the test 100 times
テストにデータセットを効果的に活用できるようになったら、次に重要なステップは、例外のテスト方法を理解することです。これには、コードが正しく動作し、予期しない入力や誤った入力があった場合に適切な例外をスローすることを確認することが含まれます:例外 →