/onis/
https://localhost/api/v1.3/onis
{"onis" { "id" : 1, "name": "muzansama", "kekkijutu": "tousou" }, { "id" : 2, "name": "yushirou", "kekkijutu": "hacking" } }
/onis/{oni_id}
https://localhost/api/v1.3/onis/2
{"onis" { "id" : 2, "name": "yushirou", "kekkijutu": "hacking" } }
class OniApisTest extends TestCase { use DatabaseTransactions; private $oni; public function setup(): void { parent::setUp(); $this->seed('OniTestDataSeeder'); $this->oni = Oni::first(); } /** * ログインなしでのアクセス確認 異常系 * */ public function testAuth() { // 鬼一覧ページ $response = $this->json('GET', '/api/v1.30/onis'); $response->assertStatus(401) ->assertExactJson([ 'error' => [ 'error_code' => 401001, 'message' => 'アクセストークンが必要です。' ] ]); // 鬼詳細ページ $targetId = $this->oni->getIdAttribute(); $response = $this->json('GET', '/api/v1.30/onis/' . $targetId); $response->assertStatus(401) ->assertExactJson([ 'error' => [ 'error_code' => 401001, 'message' => 'アクセストークンが必要です。' ] ]); } // onisオブジェクトがあるか確認 正常系 public function testOnis() { $token = $this->createAccessToken(); $response = $this->withHeaders([ 'Content-Type' => 'application/json', 'Authorization' => 'Bearer ' . $token, ]) ->json('GET', '/api/v1.30/onis'); $this->assertTrue(array_key_exists('onis', $response->original)); } /** * ログイン状態でのアクセス確認 正常系 * */ public function testOniById() { // oniオブジェクトがあるか確認 正常系 $token = $this->createAccessToken(); $targetId = $this->oni->getIdAttribute(); $response = $this->withHeaders([ 'Content-Type' => 'application/json', 'Authorization' => 'Bearer ' . $token, ]) ->json('GET', '/api/v1.30/onis/' . $targetId); $this->assertTrue(array_key_exists('oni', $response->original)); // キーの構成が厳密に正しいか 正常系確認 $response->assertExactJson([ 'oni' => [ 'id' => $this->animal->getIdAttribute(), 'name' => Normalizer::normalize($this->oni->name, Normalizer::FORM_C), 'kekkijutu' => Normalizer::normalize($this->animal->getKiketuJutuAttribute(), Normalizer::FORM_C), ] ]); $response->assertStatus(200); } /** * 鬼詳細を取得時にString型文字列がリクエストされたら400001エラーを返却するか 異常系確認 * * @return void * */ public function testAnimalByIdNotIdButString() { $token = $this->createAccessToken(); $badTargetId = (String) "花札の耳飾り・・・(ドキドキドキドキ))"; // 予期していない文字列型リクエスト $response = $this->withHeaders([ 'Content-Type' => 'application/json', 'Authorization' => 'Bearer ' . $token, ]) ->json('GET', '/api/v1.30/onis/' . $badTargetId); $response->assertJson([ 'error' => [ 'error_code' => 400001, 'message' => 'リクエスト形式が間違っています。', ] ]); $response->assertStatus(400); }
もくじ
テスト用トランザクション
テストの間だけテスト用のシードを流して、テスト終了で削除する
use Illuminate\Foundation\Testing\DatabaseTransactions; // ●ここポイント class OniApisTest extends TestCase { use DatabaseTransactions; // ●ここポイント public function setup(): void { parent::setUp(); $this->seed('OniTestDataSeeder'); $this->oni = Oni::first(); }
テスト用のSeederファイル。
ログイン限定ページのアクセスでのエラーハンドリング確認
/** * ログインなしでのアクセス確認 異常系 * */ public function testAuth() { // 鬼一覧ページ $response = $this->json('GET', '/api/v1.30/onis'); $response->assertStatus(401) ->assertExactJson([ 'error' => [ 'error_code' => 401001, 'message' => 'アクセストークンが必要です。' ] ]); // 鬼詳細ページ $targetId = $this->oni->getIdAttribute(); $response = $this->json('GET', '/api/v1.30/animals/' . $targetId); $response->assertStatus(401) ->assertExactJson([ 'error' => [ 'error_code' => 401001, 'message' => 'アクセストークンが必要です。' ] ]); }
正常系確認
- 一覧情報
- idを指定した詳細情報
/** * ログイン状態でのアクセス確認 正常系 * */ public function testOniById() { // oniオブジェクトがあるか確認 正常系 $token = $this->createAccessToken(); $targetId = $this->oni->getIdAttribute(); $response = $this->withHeaders([ 'Content-Type' => 'application/json', 'Authorization' => 'Bearer ' . $token, ]) ->json('GET', '/api/v1.30/onis/' . $targetId); $this->assertTrue(array_key_exists('oni', $response->original)); // キーの構成を厳密に正しいか 正常系確認 $response->assertExactJson([ 'oni' => [ 'id' => $this->animal->getIdAttribute(), 'name' => Normalizer::normalize($this->oni->name, Normalizer::FORM_C), 'kiketujutu' => Normalizer::normalize($this->animal->getKiketuJutuAttribute(), Normalizer::FORM_C), ] ]); $response->assertStatus(200); }
予期しないリクエストによる異常系確認
/** * 鬼詳細を取得時にString型文字列がリクエストされたら400001エラーを返却するか 異常系確認 * * @return void * */ public function testAnimalByIdNotIdButString() { $token = $this->createAccessToken(); $badTargetId = (String) "花札の耳飾り・・・(ドキドキドキドキ))"; // 予期していない文字列型リクエスト $response = $this->withHeaders([ 'Content-Type' => 'application/json', 'Authorization' => 'Bearer ' . $token, ]) ->json('GET', '/api/v1.30/onis/' . $badTargetId); $response->assertJson([ 'error' => [ 'error_code' => 400001, 'message' => 'リクエスト形式が間違っています。', ] ]); $response->assertStatus(400); }