1
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でテストコードの作成概要

Last updated at Posted at 2025-03-16

先週はテストコードを作成してみてほしいと言われた。

作成しながら学んだことを基本のキとしてまとめておく。

Laravelのテスト

Laravelは動作を保証するためにPHPUnitを使用したテストを標準でサポートしている。

テストを適切に行うことで、バグの発生を防げる。

Laravelのテストは大きく以下の2種類に分類される。

Unitテスト(単体テスト): 小さな単位のコード(メソッドやクラス)をテスト。

Featureテスト(機能テスト): HTTPリクエストやデータベース操作を含む、アプリ全体の動作をテスト。

ざっくりアプリのCRUD系、Httpリクエスト系基本動作の確認なので現在はFeatureにコードを書いている。

UnitテストとFeatureテストの違い

Unitテスト

tests/Unitフォルダに格納されるテスト。
主に個々のクラスやメソッドの動作を確認。

特徴:

  • データベースへのアクセスなし
  • 依存関係が少ない
  • 処理速度が速い

Featureテスト

tests/Featureフォルダに格納されるテスト。

主にアプリケーションの機能全体をテストする。

特徴:

  • HTTPリクエストのテストが可能
  • データベースの操作を含む
  • LaravelのTestCaseを継承するため、各種ヘルパーメソッドを使用可能

基本的なメソッドの使い方

テストで初めて見たアサーションの数々。

アサーションメソッド

$this->assertEquals($expected, $actual)

期待値と実際の値が一致するか確認

$this->assertTrue($boolean)

値がtrueか確認

$this->assertFalse($boolean)

値がfalseか確認

$this->assertNull($value)

値がnullか確認

$this->assertDatabaseHas('users', ['email' => 'test@example.com'])

指定したデータがDBに存在するか確認

HTTPレスポンステスト

$this->get('/dashboard')

GETリクエストを送信

$this->post('/register', $data)

POSTリクエストを送信

$this->put('/profile', $data)

PUTリクエストを送信

$this->delete('/user')

DELETEリクエストを送信

$response->assertStatus(200)

ステータスコードが200か確認
その他にアクセスが許されなければ403。存在しなければ404。

$response->assertRedirect('/home')

指定のURLにリダイレクトするか確認

$response->assertJson(['message' => 'Success'])

JSONレスポンスの中身を確認

その他によく使っていたメソッド

use RefreshDatabase;

テストごとにデータベースをリフレッシュする

$this->actingAs($user)

指定したユーザーとして認証済みの状態でテストを実行

$this->withoutMiddleware()

ミドルウェアを無効化してテストを実行
これを行うと弊害が結構でる。
バリデーションも無視。
使わない方向で作成した。

PostgreSQLを使ったテスト環境の構築

.env.testing の設定

DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=calorie_busters_test
DB_USERNAME=root
DB_PASSWORD=your_password

下記のコマンドを実行

php artisan key:generate --show

発行されたキーを.env.testingのAPP_KEYに記載。

docker-compose exec db psql -U laravel
//laravelのユーザーネームでDBにアクセス

CREATE DATABASE my_test_database;
//my_test_databaseという名前のDB作成

\q
//DBから抜ける。

docker compose exec app php artisan migrate --env=testing
//データベースのマイグレーションを実行する。

テストの実行方法

全体のテストを実行

docker compose exec app php artisan test

ファイル単体のテスト実行

docker-compose exec app php artisan test tests/feature/Admin/BranchControllerTest.php
1
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
1
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?