🙆
【Laravel】assertStatusの中身を見てみる
環境
Laravel 8.26.1
PHP 8.0.2
PHPUnit 9.5.2
はじめに
LaravelでPHPUnitを用いてテストをする時によく使うassertStatus
メソッドがLaravelでどのように実装されているか確認してみた。
assertStatusメソッド
assertStatus
メソッドは「/Illuminate/Testing/TestResponse.php」に定義されている。
/**
* Assert that the response has the given status code.
*
* @param int $status
* @return $this
*/
public function assertStatus($status)
{
$actual = $this->getStatusCode(); // ①
PHPUnit::assertSame(
$actual, $status,
"Expected status code {$status} but received {$actual}."
); // ②
return $this;
}
①でレスポンスのステータスコードを取得。
②でPHPUnitのアサーションメソッドであるassertSame
を使って、①で取得したステータスコードと引数で受け取ったステータスコードが同じ型かつ同じ値かチェック。
同じ型・値でない場合、"Expected ..."のエラーメッセージを返す。
使用例
公式ドキュメントから抜粋。
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Tests\TestCase;
class ExampleTest extends TestCase
{
/**
* 基本的なテスト例
*
* @return void
*/
public function test_a_basic_request()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
test_a_basic_request
メソッドは/
にアクセスしたとき、200ステータスが返ってくることを確認している。
テストを実行して正しく200が返ってきた場合は下記のように表示される。
PHPUnit 9.5.2 by Sebastian Bergmann and contributors.
.. 2 / 2 (100%)
Time: 00:01.248, Memory: 28.00 MB
一方で、200以外のステータスが返ってきた場合、下記のように表示される。
assertStatus
メソッドのエラーメッセージが表示されていることが分かる。
例)api.phpにルートを定義をしていない場合
PHPUnit 9.5.2 by Sebastian Bergmann and contributors.
F. 2 / 2 (100%)
Time: 00:01.101, Memory: 28.00 MB
There was 1 failure:
1) Tests\Feature\ExampleTest::test_a_basic_request
Expected status code 200 but received 404. // エラーメッセージ
Failed asserting that 200 is identical to 404.
Discussion