理系公務員のプログラミング日記

【Laravel6】フィーチャーテスト

タグ:
Laravel

フィーチャーテストの準備

フィーチャーテストではHTTPリクエストが問題なく動作しているかを確認します。

今回はサンプルのAPIを作ってみます。APIはroutes/api.phpにURIを設定します。

routes/api.php

<?php use Illuminate\Http\Request; Route::get('/ping',function(){ return response()->json(['message' => 'pong']); });

サーバーを起動し、上記のAPIが取得できるかをcurlコマンドで確認します。

なお、api.phpに書かれたAPIのURIは、自動的にapi/〇〇となります。

curl -v http://localhost/api/ping -w "\n"
> GET /api/ping HTTP/1.1
> Host:localhost
> User-Agent: curl/7.74.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Host: localhost
< Date: Thu, 09 Dec 2021 02:54:46 GMT
< Connection: close
< X-Powered-By: PHP/8.0.12
< Cache-Control: no-cache, private
< Date: Thu, 09 Dec 2021 02:54:46 GMT
< Content-Type: application/json
< X-RateLimit-Limit: 60
< X-RateLimit-Remaining: 59
< 
* Closing connection 0
{"message":"pong"}

テストを作成する

下記のコマンドで、Featureフォルダの中にAPIフォルダとPingTest.phpを作ります。

今回は,--unitオプションは付けないでください。

php artisan make:test API/PingTest

tests/Feature/API/PingTest

<?php namespace Tests\Feature\API; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithFaker; use Tests\TestCase; class PingTest extends TestCase { /** * A basic feature test example. * * @return void */ public function testExample() { $response = $this->get('/'); $response->assertStatus(200); } }

テストを実行するファイルでは、TestCaseクラスを継承して作成していきます。

また、クラス名とファイル名はTestで終わる必要があります。

作成されたコードでは、assertTrue()というメソッドがあります。

これは、引数がtrueであるかを判定します。

SapleTest.php

<?php namespace Tests\Unit; use PHPUnit\Framework\TestCase; class SampleTest extends TestCase { /** * A basic unit test example. * * @return void */ public function testExample() { $this->assertTrue(true); } }

PHP Unitを実行する

このSampleTest.phpを下記のコマンドで実行してみます。

./vendor/bin/phpunit tests/Unit/SampleTest.php

実行結果

PHPUnit 9.5.10 by Sebastian Bergmann and contributors.

.                                                                   1 / 1 (100%)

Time: 00:00.020, Memory: 6.00 MB

OK (1 test, 1 assertion)