1
1

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開発でPHP Unit使ったテストをしよう

Last updated at Posted at 2024-06-30

はじめに

LavavelでPHP Unitを使ったテストのやり方について記載してみました。

前提

  • Laravel 11を用いる
  • ユーザモデルに対する以下の機能について基本的なテストを作成する
    • 新規登録機能(/users/store
      • ログインを必要とする
      • ユーザ名とメールアドレスで登録する
      • 登録成功後は一覧画面(/users)にリダイレクトする
    • 一覧表示機能(/users
      • ログインを必要とする
      • 登録したデータを一覧表示する

テスト実施

テストケースクラスの作成

まずはテストケースを作成します

php artisan make:test Http/Controllers/UserControllerTest

UserControllerTestに対するテストとして作成を行いました。

実行するとtests/Feature/Http/Controllers/UserControllerTest.phpが作成されます。

テストコードを書く

tests/Feature/Http/Controllers/UserControllerTest.php
<?php

namespace Tests\Feature\Http\Controllers;

use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;

class HogeControllerTest extends TestCase
{
    public function test_index(): void
    {
        // テスト用にユーザーを作成
        $user = User::factory([
            'name'  => 'テスト太郎',
            'email' => 'hoge@example.com'
        ])->create();

        // ログイン
        $this->actingAs($user);

        // テスト対象のURLにアクセスさせる
        $response = $this->get(route('users.index'));

        //  テスト検証
        $response
            ->assertOk()                     // レスポンスに問題がないか
            ->assertSee('hoge@example.com'); // 一覧に指定したメールアドレスが表示されているか
    }

    public function test_store(): void
    {
        $data = [
            'name' => 'テスト太郎',
            'email' => 'test@example.com',
        ];

        // テスト対象のURLにアクセスさせる
        $response = $this->post(route("users.store"), $data);

        //  テスト検証
        
        // 登録後のリダイレクト先が正しいか
        $response->assertRedirect(route("users.index"));

        // 登録データがDBに保存されているか
        $this->assertDatabaseHas(User::class, $data);
    }
}

テストを実行する

今回は作成したファイルのテストだけを実行することにします。

php artisan test tests/Feature/Http/Controllers/UserControllerTest.php

$ php artisan test tests/Feature/Http/Controllers/UserControllerTest.php

   PASS  Tests\Feature\Http\Controllers\UserControllerTest
  ✓ index                                                        0.41s  
  ✓ store                                                        0.04s  

  Tests:    2 passed (4 assertions)
  Duration: 0.49s


まとめ

LaravelにはPHP Unitが初めから導入されています。
せっかくなのでテストコード書いて、開発に役立ててみましょう。

参考

告知

最後にお知らせとなりますが、イーディーエーでは一緒に働くエンジニアを
募集しております。詳しくは採用情報ページをご確認ください。

みなさまからのご応募をお待ちしております。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?