如何在 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');
我经常用
$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)
)
);
在我的 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');
我经常用
$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)
)
);