使用Laravel测试JSON响应
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Laravel测试JSON响应相关的知识,希望对你有一定的参考价值。
我用Laravel准备了一个示例API。它总是返回此对象:
{
"a": 1,
"b": 2
}
现在,我想更好地了解如何使用phpunit
进行测试。我发现有assertJson
和assertJsonFragment
方法,我无法理解它们之间的区别。
让我们说我想断言响应的确切结构,所以它需要是a=1
和b=2
,仅此而已。起初,我确信这会起作用:
$response = $this->get('/api/foo');
$response->assertStatus(200)
->assertJson(['a' => 1, 'b' => 2]);
它将通过测试,但问题是,如果我向响应中添加更多属性,如c=3
或其他任何属性,它仍会通过测试。然后有assertJsonFragment
方法,对于我的测试,行为相同,只是给出不同的错误消息。
是assertJson
越野车?有没有其他方法可以做我正在尝试做的事情,那就是确保响应是这个特定的属性集?
在Laravel 5.6和5.7上测试过。
答案
来自here:
assertJson
方法将响应转换为数组,并利用PHPUnit::assertArraySubset
验证给定数组是否存在于应用程序返回的JSON响应中。因此,如果JSON响应中还有其他属性,只要给定的片段存在,此测试仍将通过。
更重要的是,实现你想要的:
如果要验证给定数组是否与应用程序返回的JSON完全匹配,则应使用
assertExactJson
方法
以上是关于使用Laravel测试JSON响应的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.1 使用 JSON 的 API 的 PHPUnit 测试