こういうのはソースコードを読むのが一番早いです。
framework/TestResponse.php at 5.4 · laravel/framework
php
1 4567
8 public function assertJsonStructure(array $structure = null, $responseData = null)
9 {
10 if (is_null($structure)) {
11 return $this->assertJson($this->json());
12 }
13
14 if (is_null($responseData)) {
15 $responseData = $this->decodeResponseJson();
16 }
17
18 foreach ($structure as $key => $value) {
19 if (is_array($value) && $key === '*') {
20 PHPUnit::assertInternalType('array', $responseData);
21
22 foreach ($responseData as $responseDataItem) {
23 $this->assertJsonStructure($structure['*'], $responseDataItem);
24 }
25 } elseif (is_array($value)) {
26 PHPUnit::assertArrayHasKey($key, $responseData);
27
28 $this->assertJsonStructure($structure[$key], $responseData[$key]);
29 } else {
30 PHPUnit::assertArrayHasKey($value, $responseData);
31 }
32 }
33 return $this;
34 }
実際に動かしてないのでフィーリングですが,
- スカラーの存在を確認したい場合,キーを値に書く。
- 配列の存在を確認したい場合,キーをキーに書き,値に下層の定義をネストさせて書く。
- 特殊キーとして
*
でラップすることができ,この下層にあるものは nullable として扱われる。このキー自体のネストは無視する。
というコードに見えます。
php
1$response->assertJsonStructure([
2 'name',
3 'age',
4 '*' => [
5 'city' => [
6 'code',
7 'name',
8 ],
9 ],
10]);
(過去に仕事でこれ使おうとして,使い方分からなくて諦めたけど,今読んだらすんなり理解できた,リファクタリングしてみようかな…笑)