「Laravel」でAPIを実装する場合、テスト機能を使用して実装に問題がないか確認する事ができます。
しかし、「Lumen」では「Laravel」と違って、「php artisan test」が使用できません。
実行した場合に、以下のメッセージが表示されます。
ERROR Command "test" is not defined.
「Lumen」でのユニットの実行
「Lumen」では、以下の様に「phpunit」を使ってテストします。
$ vendor/bin/phpunit
また個別にテストする場合は、以下の様にパスを指定します。
$ vendor/bin/phpunit tests/ExampleTest.php
テスト用データベースの設定
テストを実行する場合、テスト用のデータベースを作成してテストを行います。
今回は、そこまで手順をまとめます。
まずは「phpunit.xml」に、テスト用データベースを定義します。
...省略
<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="QUEUE_CONNECTION" value="sync"/>
<env name="DB_DATABASE" value="dbname_test"/>
</php>
...省略
「tests/TestCase.php」に、テストを実行時にテスト用のデータベースを作成しデータを登録するように処理を書きます。
<?php
namespace Tests;
use Laravel\Lumen\Testing\TestCase as BaseTestCase;
use Illuminate\Support\Facades\Artisan;
abstract class TestCase extends BaseTestCase
{
/**
* Creates the application.
*
* @return \Laravel\Lumen\Application
*/
public function createApplication()
{
return require __DIR__.'/../bootstrap/app.php';
}
/**
* テスト開始処理
* @return void
*/
public function setUp(): void
{
parent::setUp();
// Database を作成
Artisan::call('migrate');
// Database テスト用データを作成
Artisan::call('db:seed --class=TestDatabaseSeeder');
}
/**
* テスト終了処理
* @return void
*/
public function tearDown(): void
{
// Database migration reset
Artisan::call('migrate:reset');
parent::tearDown();
}
}
上記の処理で、テスト実行時に「setUp()」が実行されて、データベースの「migrate」を実行し、テストデータのSeederが実行されます。
そしてテスト終了後に「tearDown()」でデータベースをリセットして削除します。