如何使用Laravel fluent JSON测试第n个数组元素

new9mtju  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(58)

我已经实现了一个API端点,它返回一个JSON数组,我想测试第二个元素中的值。下面是一个示例输出-在我的真实的数据中,每个数组元素都有更多的属性。我想测试数组中不同元素的属性。例如,我可能想测试第二个元素的first_name属性。

[
  { "id" 23, "first_name": "Geri"},
  { "id" 25, "first_name": "Emma"},
  { "id" 46, "first_name": "Mel"}
]

Laravel fluent JSON测试允许您使用以下语法测试 * 嵌套 * 数组中的第n个元素

$response->assertJson(fn (AssertableJson $json) =>
        $json->has('users', 3)
             ->has('users.1', fn (AssertableJson $json) =>
        ...

但我的数组是响应的根。我可以测试count和first元素,如下所示,但不知道如何测试不同的元素

$response->assertJson(fn (AssertableJson $json) =>
        $json->has(3)
             ->first(fn (AssertableJson $json) =>
             ...

除了使用流畅的方法测试第一个元素之外,还有其他方法来测试特定的元素吗?谢谢

q7solyqu

q7solyqu1#

因为你的响应是一个数组,它将以和索引为前缀(就像嵌套数组一样)。因此,只需使用要访问的元素的索引即可。在你的情况下,它会是这样的:

$response->assertJson(fn (AssertableJson $json) =>
        $json->has(3)
             ->has('2', fn (AssertableJson $json) =>
                //assert something inside 2nd element in array
                 $json->where('first_name', 'Emma')
                      ->etc()
             )
        ...

相关问题