php - 使用 Laravel 测试 JSON 响应
问题描述
我用 Laravel 准备了一个示例 API。它总是返回这个对象:
{
"a": 1,
"b": 2
}
现在,我想更好地了解如何使用phpunit
. 我发现有一些方法assertJson
,assertJsonFragment
但我无法理解它们之间的区别。
假设我想断言响应的确切结构,所以它必须是a=1
and b=2
,仅此而已,仅此而已。起初,我确信这会起作用:
$response = $this->get('/api/foo');
$response->assertStatus(200)
->assertJson(['a' => 1, 'b' => 2]);
它将通过测试,但问题是,如果我向响应中添加更多属性(例如c=3
或其他),它仍然可以通过测试。然后有一种assertJsonFragment
方法,对于我的测试,它的行为相同,只是给出不同的错误消息。
是assertJson
越野车吗?有没有其他方法可以做我想做的事情,即确保响应是这组特定的属性?
在 Laravel 5.6 和 5.7 上测试。
解决方案
从这里:
该
assertJson
方法将响应转换为数组,并PHPUnit::assertArraySubset
用于验证给定数组是否存在于应用程序返回的 JSON 响应中。因此,如果 JSON 响应中有其他属性,只要存在给定的片段,此测试仍将通过。
更重要的是,实现你想要的:
如果您想验证给定数组是否与应用程序返回的 JSON 完全匹配,您应该使用该
assertExactJson
方法
推荐阅读
- python - 遍历有向图 Python
- reactjs - 为什么我不能从同一个文件夹中导入我的组件?
- java - 我想从我的 android 手机向我的笔记本电脑上运行的 mvc asp.net 应用程序发送一个 HTTP 请求(get)
- json - 使用 Knex/Node 中的大型 json 文件播种 postgreSQL DB 表
- angular - 输入类型号达到最大值后是否可以将值设置为最小值
- python - 如何在 python 字典中查找开始和结束索引?
- mysql - 按超出范围的序号列号排序
- r - 用正则表达式重构字符串
- azure - Azure AD B2C API 连接器未修改自定义用户属性
- node.js - 无论如何在 Electron 中从我的应用程序中删除 Windows 任务栏预览?