Laravelで単体テスト: GET

Laravel
この記事は約3分で読めます。
スポンサーリンク

GETリクエストのテストコードを書き、コントローラーから返されるデータを確認します。

スポンサーリンク

テスト対象(Controller)

テスト対象のコントローラーです。
指定idのTodoを返します。

<?php

namespace App\Http\Controllers;

use App\Models\Todo;
use Illuminate\Http\Request;

class TodoController extends Controller
{
    public function getTodo(Request $request)
    {
        return Todo::find($request['id']);
    }
}
スポンサーリンク

テストコード

コントローラーのテストコードです。
GETリクエストをコントローラーに送り、レスポンスを判定します。

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    public function test_getTodo(): void
    {
        $response = $this->get(route('todo', ['id' => 1]));

        $response->dump();

        $response->assertJson(['id' => 1]);     // PASS
        $response->assertExactJson(['id' => 1, 'name' => 'test', 'isComplete' => 0]);   // PASS
        //$response->assertExactJson(['id' => 1, 'name' => 'test', 'isComplete' => 1]);   // FAIL
    }
}

GETクエリパラメータ

GETのクエリパラメータをコントローラーに渡す際には、route()というヘルパー関数を使います。
第2引数にパラメーターを指定します。

Assert

レスポンスがJSONで返されるので、assertJson()またはassertExactJson()でテストの判定を行います。
assertJson()は、指定したデータが含まれるかの確認を行います。
一方、assertExactJson()は、指定したデータと完全に一致するかの確認を行います。
なので、テスト判定は、assertJson()のほうが緩いです。


GETのレスポンスを確認するテストコードを書き、テストを実行しました。

コメント

タイトルとURLをコピーしました