我认为您应该使用:
我正在创建单元测试,并希望测试响应中返回的JSON
结构。我知道TestResponse
提供了一种方法assertJsonStructure
来匹配JSON
响应的结构。但是由于某种原因,我无法将$structure
映射到我的响应,结果测试失败。让我分享所需的摘要。
端点响应
{
"status": true,
"message": "",
"data": [
{
"id": 2,
"name": "Shanelle Goodwin",
"email": "[email protected]",
"created_at": "2017-03-05 16:12:49",
"updated_at": "2017-03-05 16:12:49",
"user_id": 1
}
]
}
测试功能
public function testEndpoint(){
$response = $this->get('/api/manufacturer/read', [], $this->headers);
$response->assertStatus(200);
$response->assertJsonStructure([
'status',
'message',
'data' => [
{
'id',
'name',
'email',
'created_at',
'updated_at',
'user_id'
}
]
]);
var_dump("'/api/manufacturer/read' => Test Endpoint");
}
data
数组中可以有多个节点,所以这就是为什么我试图在结构中提及该数组,但似乎它无法正确映射。任何帮助将不胜感激:-)
幸运的是,我通过各种选择解决了这个问题。如果我们要匹配数组中的嵌套对象,则以'*'作为键。我们可以在这里看到参考。
我为array of
个对象设置了这样的结构>]
$response->assertJsonStructure([ 'status', 'message', 'data' => [ '*' => [ 'id', 'name', 'email', 'created_at', 'updated_at', 'user_id' ] ] ]);
如果您只想匹配一个对象,则>]
$response->assertJsonStructure([ 'status', 'message', 'data' => [ [ 'id', 'name', 'email', 'created_at', 'updated_at', 'user_id' ] ] ]);
我认为您应该使用:
$response->assertJsonStructure([
'status',
'message',
'data' => [
[ // change here
'id',
'name',
'email',
'created_at',
'updated_at',
'user_id'
] // change here
]
]);
我认为您应该使用: