Laravelで自作ミドルウェアのテストを書く方法(Feature Test入門)
生徒
「先生、自作したLaravelのミドルウェアが正しく動いているかテストしたいんですが、どうすればいいですか?」
先生
「LaravelではFeature Testを使って、自作ミドルウェアを簡単にテストできます。Feature Testは、HTTPリクエストを送ってレスポンスや動作を確認するためのテスト方法です。」
生徒
「HTTPリクエストって、ブラウザでアクセスする操作のことですか?」
先生
「そうです。Feature Testでは、ブラウザでアクセスするのと同じようにリクエストをPHPコードで送って、ミドルウェアの動作やルートの応答を確認できます。」
1. ミドルウェアテストの基本
Laravelのミドルウェアは、リクエストを受け取ったときに実行される処理です。例えば、アクセス制限や認証処理、IP制限などがあります。Feature Testでは、ミドルウェアが正しくリクエストを通すか、拒否するかをテストできます。
テストは tests/Feature ディレクトリに作成し、php artisan make:test コマンドで新しいテストファイルを作ります。自作ミドルウェア用のテストも同じ手順です。
2. テストの作成手順
例えば、CheckAgeMiddleware という、自作ミドルウェアがあるとします。これは、年齢が18歳未満ならアクセスを拒否するものです。Feature Testで以下の手順を行います。
まず、ターミナルでテストファイルを作成します。
php artisan make:test CheckAgeMiddlewareTest
これで tests/Feature/CheckAgeMiddlewareTest.php が作成されます。
3. テストコードの例
次に、実際にFeature Testのコードを書きます。assertStatus はHTTPステータスコードを確認するためのメソッドです。
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class CheckAgeMiddlewareTest extends TestCase
{
public function test_access_allowed_for_adult()
{
$response = $this->withHeaders([
'AGE' => 20
])->get('/restricted');
$response->assertStatus(200);
}
public function test_access_denied_for_minor()
{
$response = $this->withHeaders([
'AGE' => 15
])->get('/restricted');
$response->assertStatus(403);
}
}
上記の例では、withHeaders メソッドを使ってHTTPリクエストヘッダーに年齢情報を渡しています。18歳以上なら200(成功)、未満なら403(禁止)になることを確認しています。
4. テスト実行方法
テストはターミナルから以下のコマンドで実行できます。
php artisan test --filter=CheckAgeMiddlewareTest
結果が緑色なら全てのテストが成功、赤色なら失敗です。失敗した場合は、ミドルウェアの処理やルート設定を確認しましょう。
5. テストのポイント
Feature Testでミドルウェアをテストする際のポイントは以下です。
- HTTPステータスコードでリクエストの成功・失敗を確認する
- 必要に応じてリクエストヘッダーやパラメータを指定する
- ルートがミドルウェアに正しく通っているかを意識する
- 異常系テストも作成して、拒否処理や例外処理が動作するか確認する
Feature Testは、ブラウザで動作を確認する前に自動でチェックできるため、開発効率や品質向上に非常に役立ちます。
6. まとめ的なポイント
Laravelで自作ミドルウェアのFeature Testを書くと、HTTPリクエストに対してミドルウェアが正しく動作するかを自動で確認できます。assertStatus や withHeaders を活用することで、様々な条件をテストでき、品質の高いAPIやアプリケーションの開発が可能になります。