2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravel Featureテストで使った assert まとめ

2
Posted at

インポート機能を書いていたときに、「結局どの 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にする
    • &lt;エスケープした文字を非アックする時に利用する

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);

意味

配列の中に特定の値が含まれているかを確認する。

このテストでの用途例

  • セッションのエラーメッセージ一覧の中に、
    期待しているメッセージが含まれているかどうかの確認
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?