【Laravel】【PHPUnit】コレクションや配列のテスト
今日はLaravelでよく出てくるCollectionデータのテストコードを書いていて
ハマったのでまとめます。
サンプルはこちら。
Post一覧取得APIのテストコード · aihara005/laravelprot@ba2e4b8 · GitHub
PHPUnitテスト by aihara005 · Pull Request #3 · aihara005/laravelprot · GitHub
PHPUnitの準備
まずはローカルでphpunitを使うための準備。
$ vi .env
APP_URL = 自分のURL
※ php artisan serveで立ち上げてる時は
http://127.0.0.1:8000
サンプルテストを作る
早速簡単なテストを作って通過するかチェックします。
前回の記事でちょうどGETリクエストでレスポンスを返すAPIを作成していたので
それを使って200レスポンスがかえるかテストします。
/tests/Feature/ExampleTest.php
<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Foundation\Testing\RefreshDatabase; class ExampleTest extends TestCase { /** * A basic test example. * * @return void */ public function testBasicTest() { $response = $this->get('/posts'); $response->assertStatus(200); } }
コレクションのテストを作る
それでは前回作成したpostsのAPIについて、
postsコレクションがjsonで返却されるので
テストを作ってみます。
tests/Feature/PostsTest.php
<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Foundation\Testing\RefreshDatabase; class PostsTest extends TestCase { /** * A basic test example. * * @return void */ public function testGetPosts() { $response = $this->get('/posts'); $response->assertStatus(200) ->assertJsonStructure([ // Json形式を指定 'data' => [ // コレクション系は * でキーを指定すればok '*' => [ 'id', 'title', 'body', // リレーションも1対多なのでネストした状態で * でキーを指定すればok 'comments' => [ '*' => [ 'id', 'post_id', 'body' ] ] ] ] ]); } }
「*」 を使う形式でokでした・・・!
テストを実行する
コレクションなどでモデルが配列になって返ってくるタイプはこれで解決しそうです。
結構はまりました。。。
エラー
失敗パターンもちゃんと指摘してくれます。
例えば上記のpost_idをpost_aaaidなどに変換すると
そんなidないよって怒ってくれますね。素敵です。
以上