LaravelでAPIのレスポンスをテストする方法を完全解説!assertJsonで初心者も安心
生徒
「LaravelでAPIを作ったんですが、ちゃんと正しいデータが返っているか不安です…」
先生
「それならAPIのレスポンスをテストする方法を覚えると安心ですよ。」
生徒
「パソコン操作もあまり慣れていませんが、大丈夫でしょうか?」
先生
「画面の表示を確認する感覚で理解できるので、ゆっくり進めていきましょう。」
1. APIとレスポンスとは何か
APIとは、アプリ同士が情報をやり取りするための窓口です。例えば、レストランで注文を取る窓口のような存在です。レスポンスとは、その注文に対して返ってくる料理のようなものです。LaravelでAPIを作ると、多くの場合はJSON形式という決まった形のデータが返ってきます。APIテストでは、この返ってくる内容が正しいかを確認します。
2. LaravelでAPIテストを行う理由
APIは画面に表示されないことが多いため、目で確認しづらいです。そのため、テストコードを書いて自動で確認します。これにより、修正を加えても壊れていないかすぐ分かります。Laravelのテスト機能を使えば、実際にアクセスしたような形でAPIのレスポンスをチェックできます。
3. APIレスポンスをテストする基本の流れ
APIテストは「アクセスする」「返ってきた結果を見る」「正しいか確認する」という流れです。Laravelではgetやpostといった命令でAPIを呼び出し、assertJsonなどの命令で内容を確認します。assertは「本当にそうなっているか確認する」という意味です。
public function test_api_returns_status_ok()
{
$response = $this->get('/api/sample');
$response->assertStatus(200);
}
4. assertJsonで中身を確認する方法
assertJsonは、APIのレスポンスに含まれるJSONデータが正しいかを確認するための機能です。買い物のレシートを見て、合計金額が合っているか確かめる感覚に近いです。必要な項目が含まれているかを簡単にチェックできます。
public function test_api_returns_json_structure()
{
$response = $this->get('/api/user');
$response->assertJson([
'name' => 'Taro',
'email' => 'taro@example.com'
]);
}
5. JSONの形だけを確認するassertJsonStructure
値は変わるけれど、項目の形だけ確認したい場合があります。そのときに便利なのがassertJsonStructureです。箱の中身までは見ず、箱がちゃんと用意されているかを確認するイメージです。
public function test_api_json_structure_only()
{
$response = $this->get('/api/user');
$response->assertJsonStructure([
'id',
'name',
'email'
]);
}
6. 配列データを返すAPIのテスト
APIでは、複数のデータを配列として返すことがあります。例えば、商品一覧のような場合です。その場合もLaravelのテストで簡単に確認できます。
public function test_api_returns_list()
{
$response = $this->get('/api/items');
$response->assertJsonCount(3);
}
assertJsonCountは、データの数が合っているかを確認します。
7. ステータスコードとJSONを組み合わせて確認
APIテストでは、ステータスコードとJSONの両方を確認するのが基本です。ステータスコードは、処理が成功したかどうかを示す番号です。200は成功を意味します。これを一緒に確認することで、より安全なテストになります。
public function test_api_success_response()
{
$response = $this->get('/api/sample');
$response->assertStatus(200)
->assertJson(['result' => 'success']);
}
8. 初心者がつまずきやすいポイント
初心者がよく迷うのは、JSONの形と値の違いです。まずは「項目が存在するか」を確認し、慣れてきたら「値が正しいか」を見ると理解しやすいです。LaravelのAPIテストは、画面を見ずに中身を確認できる便利な仕組みなので、少しずつ慣れていきましょう。