インポート機能を書いていたときに、「結局どの assert が何をチェックしているのか?」
自分用に整理したメモ。
1. このテストで出てきた assert 一覧
今回利用したアサーションだけを抜き出すと、だいたいこんな感じ。
// Response 系
$response->assertStatus(200);
$response->assertRedirect(...);
$response->assertViewIs(...);
$response->assertSee(...);
$response->assertHeader(...);
// Session / Validation 系
$response->assertSessionHas(...);
$response->assertSessionHasErrors(...);
$response->assertSessionDoesntHaveErrors(...);
// 値・状態系(PHPUnit)
$this->assertEquals(...);
$this->assertTrue(...);
$this->assertFalse(...);
$this->assertNull(...);
$this->assertNotNull(...);
$this->assertCount(...);
$this->assertContains(...);
2. レスポンス系アサーション
2-1. assertStatus
$response = $this->get(route('import.fruits.index'));
$response->assertStatus(200);
意味
HTTPステータスコードを確認する。
- 200:正常に表示できているか
- 403:権限がないときに 403 が返っているか
などをチェックするのに使う。
2-2. assertRedirect
$response->assertRedirect(route('login'));
意味
レスポンスが特定のURLにリダイレクトされていることを確認する。
このテストでの用途例
- ゲストユーザーは login にリダイレクトされるか
- インポート後に import.fruits.index に戻っているか
2-3. assertViewIs
$response->assertViewIs('import.fruits.index');
意味
返却されるビューが指定したテンプレート名かどうかを確認する。
- 「このルートにアクセスしたとき、本当にimport.fruits.indexが返っている?」
を保証するために使う。
2-4. assertSee
$response->assertSee(route('import.fruits.template'), false);
意味
レスポンスHTMLの中に指定した文字列が含まれているかを確認する。
このテストでの用途例
- テンプレートダウンロードのURLが画面に出ているか
- アップロードフォームの action に期待したURLが出力されているか
- < や > や & を含む値を比較したい場合はfalseをtrueにする
-
<エスケープした文字を非アックする時に利用する
-
2-5. assertHeader
$response->assertHeader(
'content-type',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
);
意味
レスポンスヘッダーに指定のヘッダーが設定されているかを確認する。
このテストでの用途例
- テンプレートダウンロードが本当に Excel(.xlsx)として返っているかどうかを確認する
3. セッション/バリデーション系アサーション
3-1. assertSessionHas
$response->assertSessionHas('success', "インポート完了: 合計 1 件中、成功 1 件");
意味
セッションに指定キーの値が保存されていることを確認する。
このテストでの用途例
- インポート成功時にsuccessメッセージがセットされているか
- エラー時にimport_errorsがセッションに入っているか
3-2. assertSessionHasErrors
$response->assertSessionHasErrors('import_file');
意味
バリデーションエラーとして、指定フィールドにエラーがあることを確認する。
このテストでの用途例
- ファイル未選択
- 不正なファイル形式(PDFなど)
- 不正な日付・数値 など、
「バリデーションに引っかかるケース」を検証するために利用。
3-3. assertSessionDoesntHaveErrors
$response->assertSessionDoesntHaveErrors('import_file');
意味
指定フィールドにバリデーションエラーがないことを確認する。
このテストでの用途例
- .xlsx / .xls など「許容される形式」のとき
- バリデーションエラーではなく、インポート処理まで進んでいることを保証する
4. 値・状態をチェックするアサーション
4-1. assertEquals
$this->assertEquals(0, fluit::count());
$this->assertEquals('TEST-001', $fluit->management_id);
意味
「期待値」と「実際の値」が等しいことを確認する。
このテストでの用途例
- インポート後の
fluit::count()が想定どおりか - Excelの各列が、期待どおりのカラムにマッピングされているか
4-2. assertTrue / assertFalse
$this->assertTrue($fluit->is_aggregate_target);
$this->assertFalse($fluit->is_aggregate_target);
意味
- assertTrue : 条件が true であることを確認
- assertFalse: 条件が false であることを確認
このテストでの用途例
- 集計対象フラグ(is_aggregate_target)の値
- 「対象」 → true
- 「対象外」 → false
4-3. assertNull / assertNotNull
$this->assertNull($fluit->weight);
$this->assertNull($fluit->memo);
$this->assertNotNull($errors);
意味
- assertNull : 値が
nullであること - assertNotNull : 値が
nullではないこと
4-4. assertCount
$this->assertCount(count($expectedMessages), $errors);
$this->assertCount(2, $errors);
意味
配列・コレクションの要素数が期待通りかを確認。
このテストでの用途例
- import_errors に入っているエラー件数
- 複数行エラーがすべて記録されているか
4-5. assertContains
$this->assertContains($expectedMessage, $messages);
意味
配列の中に特定の値が含まれているかを確認する。
このテストでの用途例
- セッションのエラーメッセージ一覧の中に、
期待しているメッセージが含まれているかどうかの確認