📝
Laravel9 テスト用DBの作成と実行
はじめに
Laravelのテストを学習し始めて、テスト用DBの作成とDBのテストについて学んだので記録として残そうと思います。
環境
- Docker-compose
- Laravel 9.19
- PHP 8.1
テスト準備手順
- テスト用DBの作成
まずmysqlにログインして、テスト用DBを作成しておきます。mysql> create database test_laravel;
- .env.testingの作成
プロジェクトのルートに.env.testingを作成することで、PHPUnitテストを実行するとき、または--env=testingオプションを指定してArtisanコマンドを実行するときに、.envファイルの代わりに使用されます。
.env.exampleをコピーして、.env.testingファイルを作成。cp .env.example .env.testing
- .env.testingの編集
test用のキーを作成する。APP_ENVをtestingに変更。また、DB_DATABASEをMYSQLで作成した、DB名に変更する。php artisan key:generate --env=testing
.env.testingAPP_ENV=testing DB_DATABASE=test_laravel
- phpunit.xmlの編集
name="DB_DATABASE"
の行のコメントアウトを外して、valueの値をMYSQLで設定したDB名に変更する。phpunit.xml<env name="DB_DATABASE" value="test_laravel"/>
テストの実行
- テストの作成下記のテストでは、まずSeedを実行してテスト用データベースにダミーのデータを保存しています。
php artisan make:test MainTest
また、新規ユーザーが登録されたときにデータベースに保存されているかのテストをしています。MainTest.php<?php namespace Tests\Feature; use Illuminate\Support\Facades\Artisan; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithFaker; use Tests\TestCase; class MainTest extends TestCase { use RefreshDatabase; public function setUp(): void { parent::setUp(); // テスト用データベースに seed を実行する Artisan::call('migrate:fresh --seed'); } /** * A basic feature test example. * * @return void */ public function test_ユーザーを新規登録してDBに保存ができるか() { $data = [ 'name' => 'test', 'email' => 'test@email.com', 'password' => 'test12345', 'password_confirmation' => 'test12345', ]; $response = $this->postJson(route('register'), $data); $response->assertStatus(302) ->assertRedirect('/'); $this->assertDatabaseHas('users', [ 'name' => 'test', 'email' => 'test@email.com', ]); } }
- テストの実行
php artisan test php artisan test tests/Feature/MainTest.php
Discussion