Laravelの認証・認可を含むテストケースの書き方を完全解説!初心者でも安心
生徒
「Laravelでテストを書くときに、ログインしているかどうかも確認できるんですか?」
先生
「できますよ。Laravelでは認証や認可を含めたテストも、とても簡単に書けるようになっています。」
生徒
「まだパソコン操作も不安なんですが、大丈夫でしょうか?」
先生
「画面を操作するイメージで考えれば大丈夫です。順番に一つずつ見ていきましょう。」
1. Laravelのテストとは何か?
Laravelのテストとは、アプリケーションが正しく動いているかを自動で確認する仕組みです。人が毎回画面を開いて確認する代わりに、プログラムが代わりにチェックしてくれます。例えば「ログインできるか」「ログインしていない人が入れないページにアクセスできないか」といったことを確認できます。テストを書くことで、修正や追加をしても安心して開発を進められるようになります。
2. 認証と認可の違いをやさしく理解しよう
認証とは「あなたは誰ですか?」を確認する仕組みです。ログイン画面でメールアドレスとパスワードを入力する行為がこれにあたります。一方で認可とは「その人は何をしてよいですか?」を決める仕組みです。例えば、管理者だけが見られるページがある場合、それが認可です。家に例えると、玄関で本人確認をするのが認証、入れる部屋を決めるのが認可になります。
3. テスト前の基本準備
Laravelでは最初からテスト環境が整っています。テストは「tests」フォルダの中に書きます。多くの場合、画面の動きを確認するテストは「Feature」フォルダに作ります。テストは本番のデータを使わず、テスト専用の環境で動くため、失敗しても安心です。これにより、初心者でも気軽に試すことができます。
4. ログインしていない状態をテストする方法
まずはログインしていない人がアクセスした場合のテストです。Laravelでは画面を開く操作もテストで再現できます。ログインしていない状態でページを開き、ログイン画面に移動するかを確認します。
public function test_guest_cannot_access_dashboard()
{
$response = $this->get('/dashboard');
$response->assertRedirect('/login');
}
このコードでは、ログインしていない人がダッシュボードに入ろうとすると、ログイン画面へ移動することを確認しています。
5. ログイン済みユーザーのテストを書く
次に、ログインしている状態を作る方法です。Laravelでは「ユーザーを用意してログインさせる」処理を簡単に書けます。これは実際にログイン操作をするのではなく、ログインしたことにする仕組みです。
public function test_user_can_access_dashboard()
{
$user = User::factory()->create();
$response = $this->actingAs($user)->get('/dashboard');
$response->assertStatus(200);
}
actingAsは「このユーザーでログインしている状態」を作る命令です。画面を操作する感覚で理解すると分かりやすいです。
6. 認可を含めたテストの考え方
認可のテストでは、権限がある人とない人の違いを確認します。例えば管理者だけがアクセスできるページを用意し、一般ユーザーでは入れないことをテストします。これにより、誤って誰でも操作できる状態になるのを防げます。
public function test_non_admin_cannot_access_admin_page()
{
$user = User::factory()->create(['is_admin' => false]);
$response = $this->actingAs($user)->get('/admin');
$response->assertStatus(403);
}
403は「許可されていない」という意味の番号です。数字は難しく見えますが、「入れません」という合図だと覚えれば十分です。
7. 管理者ユーザーの認可テスト
反対に、権限を持つユーザーが正しく操作できるかも確認します。同じ画面でも、ユーザーの立場によって結果が変わることをテストで表現します。
public function test_admin_can_access_admin_page()
{
$admin = User::factory()->create(['is_admin' => true]);
$response = $this->actingAs($admin)->get('/admin');
$response->assertStatus(200);
}
このように、同じURLでもユーザーの条件を変えて確認するのがポイントです。
8. 認証・認可テストを書くメリット
認証や認可を含めたテストを書くことで、セキュリティ面のミスを防げます。画面が増えても、テストがあれば自動で確認できるため安心です。初心者のうちからテストを書く習慣をつけることで、後から修正する手間が減り、安定したLaravelアプリケーションを作れるようになります。