如何使用Laravel流畅JSON测试验证根数组的第n个元素
Laravel 测试根JSON数组指定位置元素的流畅式方法
当你的API返回根级JSON数组时,完全可以用流畅式语法直接定位并测试任意位置的元素,核心是把数组的索引值(从0开始)作为参数传给has()方法,或者直接用索引.属性名的格式做断言。
方法一:用has()定位指定索引元素并验证属性
直接通过索引定位到目标元素,嵌套闭包测试其字段:
$response->assertJson(fn (AssertableJson $json) => $json->has(3) // 先断言数组总长度为3 // 测试第二个元素(索引为1) ->has(1, fn (AssertableJson $json) => $json->where('id', 25) ->where('first_name', 'Emma') ->etc() // 不需要验证其他字段时用这个方法跳过检查 ) // 继续测试第三个元素(索引为2) ->has(2, fn (AssertableJson $json) => $json->where('id', 46) ->where('first_name', 'Mel') ->etc() ) );
方法二:直接断言指定索引的属性
如果不需要完整验证元素的所有字段,也可以直接在根闭包中通过索引.属性名的格式做快速断言:
$response->assertJson(fn (AssertableJson $json) => $json->has(3) ->where('1.first_name', 'Emma') // 验证第二个元素的first_name ->where('2.id', 46) // 验证第三个元素的id );
注意点
- 数组索引从0开始,第二个元素对应索引
1,第三个对应2,以此类推。 etc()方法用于跳过对元素剩余未声明字段的检查,避免测试冗余,如果你需要验证元素的所有属性,可以去掉这个方法,逐个声明字段断言。
内容的提问来源于stack exchange,提问作者anorakgirl
相关产品推荐
相关产品推荐

