はじめに
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が初めから導入されています。
せっかくなのでテストコード書いて、開発に役立ててみましょう。
参考
告知
最後にお知らせとなりますが、イーディーエーでは一緒に働くエンジニアを
募集しております。詳しくは採用情報ページをご確認ください。
みなさまからのご応募をお待ちしております。