如何在 Laravel 8 中测试 AssertableJson 中的数组?

How to test array in AssertableJson in Laravel 8?

在我的 Laravel 项目中,我想测试一个 JSON 响应实际上是一个带有 data 键的分页器结果。它是一个数组,它包含一些元素。我们不知道确切的数量,因为它来自一个函数。

我的问题是,如果分页限制为 10,并且我将元素数更改为超过分页限制,例如 20,我仍然只能返回 10 个元素。不过我也想试试。

现在我有了这个代码:

$response
    ->assertSuccessful()
    ->assertJson(function (AssertableJson $json) use ($allElementsCount) {
        $json
            ->has('data')
            ->whereType('data', 'array')
            // here I want to test the count of 'data' array
            ->etc();
    });

如何测试 JSON 响应中的数组计数?

您可以使用

$response->assertJsonCount(10, 'data');

Reference

我经常用

$reponse->assertJson(fn (AssertableJson $json) => $json
    ->has('data', 10); // expect data has 10 items
    ->count('data', 10) // this also works, but I don't use this for no reason
    // and while at it, this is my way to make sure the order is correct
    ->where('data.0.id', $items[0]->id)
    ->where('data.1.id', $items[1]->id)
);

如果只需要 1 个项目

$reponse->assertJson(fn (AssertableJson $json) => $json
   // expect data has 1 item, and has these attributes
   ->has('data', 1, fn (AssertableJson $json) => $json
       ->where('id', $item->id)
       ->where('name', $item->name)
   )
);