curlでちゃちゃっと動作確認しましたが、ユニットテストも書いて確認します。
ユニットテストファイル作成
$ php artisan make:test UserTest
これでtests/Feature/UserTest.phpが生成されますので、内容を以下のようにします。
<?php namespace Tests\Feature; use App\User; use Tests\TestCase; use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Foundation\Testing\WithFaker; use Illuminate\Foundation\Testing\RefreshDatabase; class UserTest extends TestCase { use DatabaseMigrations; protected function setUp() { parent::setUp(); (new \DatabaseSeeder())->run(); } public function testIndex() { $response = $this->get('/api/users'); $response->assertStatus(200); $this->assertCount(50, $response->json()); } public function testShow() { $response = $this->get('/api/users/1'); $response->assertStatus(200); } public function testStore() { $data = ['name' => 'テストユーザ', 'email' => 'fugagaga@hoge.com', 'password' => 'secret']; $response = $this->post('/api/users', $data); $response->assertStatus(200); $item = User::query()->find($response->json()['id']); $this->assertInstanceOf(User::class, $item); } public function testUpdatet() { $data = ['name' => 'ユーザ名前変更']; $response = $this->patch('/api/users/1', $data); $response->assertStatus(200); $response->assertJson($data); $item = User::query()->find(1); $this->assertSame('ユーザ名前変更', $item->name); } public function testDelete() { $response = $this->delete('/api/users/1'); $response->assertStatus(200); $this->assertNull(User::query()->find(1)); } }
use DatabaseMigrations でテストの前後にmigrateとrollbackを行ってきれいな状態でテストしてくれるようになります。
また、(new \DatabaseSeeder())->run();でseedを実行してテストデータをインポートしています。
テスト用のDBはインメモリに設定
config/database.phpを以下のように。
'connections' => [ 'sqlite_test' => [ 'driver' => 'sqlite', 'database' => ':memory:', 'prefix' => '', ],
phpunit.xmlを以下のように。
DB_CONNECTION要素を追加しています。
<?xml version="1.0" encoding="UTF-8"?> <phpunit backupGlobals="false" ・・・ <php> <env name="APP_ENV" value="testing"/> <env name="BCRYPT_ROUNDS" value="4"/> <env name="CACHE_DRIVER" value="array"/> <env name="SESSION_DRIVER" value="array"/> <env name="QUEUE_DRIVER" value="sync"/> <env name="MAIL_DRIVER" value="array"/> <env name="DB_CONNECTION" value="sqlite_test"/> </php> </phpunit>
ユニットテスト実行
$ ./vendor/bin/phpunit tests/Feature/UserTest.php PHPUnit 7.2.4 by Sebastian Bergmann and contributors. ..... 5 / 5 (100%) Time: 427 ms, Memory: 18.00MB OK (5 tests, 10 assertions)
以上です。