Laravelではテスト用のフレームワークとして、PHPUnitやPestが使えます。
本記事では、LaravelでのPHPUnitの基本の使い方を説明します。
Webアプリ開発にテストは必須です。
手動テストで十分なこともありますが、Webアプリによっては、テスト自体を自動化してしまうほうがラクなこともあります。
テストの自動化にご興味あれば、参考にしてください。
今回は超基本の使い方を説明します。
CRUDに即したテストの作り方を知りたい場合は、次回記事を参考にしてくださいね。
PHPUnitでは2つの方法でテストを書ける:FeatureとUnit
PHPUnitでは、UnitとFeatureという2つの種類のテストを実施できます。
まずはこの部分から説明していきます。
Unitテストは、あるクラスの特定のメソッドが、タスクを実行するかどうかを見たりする時に使えます。プログラマ目線のテストといえます。
一方Featureテストは、想定通りにWebアプリが動作するかを見ます。ユーザー目線のテストといえます。
テストファイルの場所とコマンド
次にPHPUnitのインストールについて説明します。
といっても、Laravel Breezeをインストールすると、PHPUnitはデフォルトで搭載されています。
Laravelのインストールについては、下記を参照してください。
上記ページ内の「Breezeのインストール」から、Laravel Breezeのインストール方法を解説しています。
Laravel Breezeインストールコマンド実行時にいくつか質問が表示されます。
3個目の質問で「PHPUnitの代わりにPestテストを入れますか?」と聞かれます。ここで「no」と入れると、PHPUnitがインストールされます。
【Laravel Breezeインストール時の質問】
インストール後のプロジェクトを見てみます。
【インストール後のプロジェクト内】
testsフォルダの中には、UnitとFeatureの2つのフォルダが入っています。テストのシナリオは、この中に入れていきます。
プロジェクトの中にはphpunit.xmlファイルというのがあります。ここには、テストでどのシナリオを使用するかを指定します。
ここまで基本ポイントを説明してきました。ここから先は、実際にテストを作ってみましょう。
ページ表示用のテストを作ってみる
今回はとりあえず「あるページにアクセスしたら問題なくページが表示されるか」というテストを、Featureを使って作ってみましょう。
①テスト作成
まずtestsの中に、テストファイルを作成します。
次のようにテスト作成用コマンドを実行します。
1 |
php artisan make:test Test/FirstTest |
tests/Featureの中にTestフォルダができ、その中にFirstTestというテストファイルが作成できます。
②テストの作成
test/Feature/Test/FirstTest.phpファイルを開き、次のようにテスト用のコードを入力します。
【FirstTest.php】
1 2 3 4 5 6 7 |
public function test_example(): void { $response = $this->get('/'); $response->assertStatus(200); } |
これによって、トップページ(/) が無事に開けるかがテストできます。
$response->assertStatus(200);は、HTTPステータスが200であるかどうかを確認するコードです。HTTPステータスが200であれば、リクエストが無事サーバーで受理された状態ということになります。
③実行するテストの設定
次にプロジェクト直下にあるphpunit.xmlファイルを開きます。下記のようにコードを書き替えます。
【phpunit.xml】
1 2 3 4 5 6 7 8 9 10 11 12 |
<testsuites> <testsuite name="Unit"> <!-- 無効にする --> <!-- <directory suffix="Test.php">./tests/Unit</directory> --> </testsuite> <testsuite name="Feature"> <!-- 無効にする --> <!-- <directory suffix="Test.php">./tests/Feature</directory> --> <!-- 追加する --> <directory suffix="Test.php">./tests/Feature/Test</directory> </testsuite> </testsuites> |
これによってデフォルトで存在するテストは実行せず、今作成したtest/Testの中にあるテストのみを実行します。
デフォルトでは、tests/Featureの中にログイン等のテストが用意されています。どのテストを実行するかはお好みで変えてください。
④テスト実行
最後にテスト実行用コマンドを下記のとおり入力します。
1 |
php artisan test |
無事にページが開ける場合には、次のような画面になります。
さいごに
今回はLaravelでPHPUnitを使ってテストを実施する基本の方法を解説しました。
ページが複数ある場合に、すべてのページが無事開けるかどうかを毎回手動で確認するのは大変です。今回お伝えしたような形でPHPUnitでテストを作ってしまえば、コマンドひとつで自動テストを実行できます。
ただ、実際の開発の現場では、より複雑なテストが必要になりますよね。次回以降は、CRUD処理をテストするためのPHPUnitコードについて解説していきます。
もっと詳しくPHPUnitの使い方が知りたいを思ったら、次回記事も参考にしてくださいね。