テストの種類を知る
Unitテストは小さなクラスやメソッドを、Featureテストは複数の部品が協力する機能を確認します。Webアプリでは、ルート、認証、DB、レスポンスまでを確認するFeatureテストが大きな安心につながります。
作成と実行COMMAND
php artisan make:test PostTest
php artisan make:test PriceCalculatorTest --unit
php artisan test小さく失敗させる テストが失敗したら、期待値、入力、ルート、DB状態を一つずつ確認します。テストを通すためだけに実装を弱めないことが大切です。
HTTPテストを書く
ブラウザー操作を自動化しなくても、HTTPリクエストを送ってステータス、画面の文字、リダイレクトを検証できます。
Feature TestPHP
test('投稿一覧を表示できる', function () {
$post = Post::factory()->create([
'title' => '確認用の投稿',
]);
$this->get(route('posts.index'))
->assertOk()
->assertSee('確認用の投稿');
});未認証の確認PHP
test('未ログインでは作成画面へ進めない', function () {
$this->get(route('posts.create'))
->assertRedirect('/login');
});DBの状態も検証する
RefreshDatabaseでテストごとにDBを初期化し、画面だけでなく行が作成されたか、作成されなかったかを確認します。
登録と検証PHP
uses(RefreshDatabase::class);
test('ログイン利用者は投稿を作成できる', function () {
$user = User::factory()->create();
$this->actingAs($user)->post(route('posts.store'), [
'title' => '新しい投稿',
'body' => '本文です',
]);
$this->assertDatabaseHas('posts', [
'user_id' => $user->id,
'title' => '新しい投稿',
]);
});入力エラーならassertSessionHasErrors、権限不足なら403、APIならJSON構造とステータスコードを検証します。
CIで毎回テストする
GitHub ActionsなどのCIで、Pull Requestごとに依存関係のインストール、静的解析、テストを実行します。人が覚えておく手順を自動化し、未確認の変更を取り込まない仕組みを作ります。
実行する手順の例COMMAND
composer install --no-interaction --prefer-dist
cp .env.example .env
php artisan key:generate
php artisan migrate --force
php artisan test秘密情報を登録しない CIの環境変数へ登録したキーをログへ表示しません。リポジトリへ
.envをコミットせず、必要な値はCIや本番環境の安全な設定へ登録します。公開前に確認する
Webサーバーの公開先はLaravelプロジェクトのpublicディレクトリーに限定します。デバッグ表示を無効にし、HTTPS、DB、ストレージ、キュー、スケジューラー、バックアップを確認します。
本番で確認するコマンド例COMMAND
php artisan about
php artisan migrate --force
php artisan optimize
php artisan queue:restart公開チェック
APP_ENV=production、APP_DEBUG=false- HTTPSと安全なCookie設定
- 書き込み可能なstorageとキャッシュ
- ログ監視、メール、キュー、定期実行
- DBバックアップと復旧手順
練習問題
総合課題の読書メモアプリについて、一覧表示、未認証の作成拒否、空タイトルの入力エラー、他人のメモの更新拒否をテストしてください。
完成条件
- テスト用DBへ本番データが入らない
- 4つの異なる失敗・成功条件を自動で検証する
- 全テストを
php artisan testで実行できる - 本番用の秘密情報をテストコードへ直書きしない
