Laravelアプリにおけるテストコード〜基礎編
本日のお題
本日のお題は、Laravelアプリのテストコード(基礎編)です。
目次
- テストコードのファイルについて
- 既存のテストコードファイル
- 新しいファイルの追加
- ファイルの中身の編集
- テストの実行
テストコードのファイルについて
テストコードのファイルに関して、最初に押さえておくことは以下の2つです。
- テストコードは、testsディレクトリに配置する。
- testsディレクトリの中にはFeatureディレクトリとUnitディレクトリがあり、いわゆる単体テストは前者、結合テストは後者の中にファイルを作成する。
まずはこれを押さえた上で、次に進みましょう。
既存のテストコードファイル
上記のFeatureディレクトリとUnitディレクトリには、それぞれ既存のファイルが一つづつ用意されています。
それぞれ、中身を見ていきましょう。
Feature/EampleTest.php
class ExampleTest extends TestCase{
use WithoutMiddleware;
....中略.....
public function test_example(){
$response = $this->get("/");
$response->assertStatus(200);
}
}
$response = $this->get("/");は"/"にgetメソッドでリクエストを送るための記述であり、$response->assertStatus(200);はレスポンスのステータスコードが200であることを確認するためのものです。
なので、"/"にリクエストを送信して成功すれば、このテストも成功ということになります。
ちなみに、もう一つのUnit/ExampleTest.phpには以下の一文しかありません。
public function test_example(){
$this->assertTrue(true);
}
なお、assertTrueメソッドは、引数がtrueかどうかをテストするためのものなので、テストが動けば必ず成功します。
assertXxx系のメソッドについては、いずれまとめると思います。
ファイルの追加
ファイルを追加するには、以下のコマンドを使用します。
これで、指定したファイルがTests/Featureディレクトリに作成されます。
テストコードファイルの編集
基本的には、テスト内で実行したい処理を順番に記述していくだけです。
ですが、そのためのメソッドは知っておかないといけないので、代表的なものを載せておきます。
- get("xxx")
引数として与えたURLに対し、getメソッドでリクエストを送った場合のレスポンスを取得する。そのまま変数に代入することも可能。
例)$response = $this->get("/"); - post("/", "xxx")
上記のgetメソッドのHTTPメソッドをPOSTに変更したバージョンです。
POSTメソッドは何かしらのパラメータをコントローラに送信しているはずなので、それらを第二引数に連想配列の形で指定します。
以下の例では、"items"というパスにname="ゲーム機", price=10000というパラメータを送信しています。
$response = $this->post("/items", [ "name" => "ゲーム機", "price" => 10000 ]); - $response->assertStatus(xxx)
レスポンスが返って来た際のHTTPステータスコードがxxxであるかどうかをテストします。 - $response->assertRedirest("/xxx");
指定したパスにリダイレクトされるかどうかをテストします。
テストの実行
テストの実行は、php artisan testコマンドで実行可能です。
このコマンドを叩くことで、testsディレクトリ以下の全てのテストが実行されます。
まとめ
基礎編についてはこの辺りで。
次回は、テストコード用のメソッドかFactory系についてまとめると思います。