You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 20:03:14