Far*_*han 22 phpunit unit-testing laravel laravel-5 laravel-5.4
我正在创建一个单元测试,并希望测试JSON响应中返回的结构.我知道它TestResponse提供了一种assertJsonStructure匹配JSON响应结构的方法.但由于某种原因,我无法将其映射$structure到我的响应,结果测试失败.让我分享一下所需的片段.
终点响应
{
"status": true,
"message": "",
"data": [
{
"id": 2,
"name": "Shanelle Goodwin",
"email": "chaz43@example.net",
"created_at": "2017-03-05 16:12:49",
"updated_at": "2017-03-05 16:12:49",
"user_id": 1
}
]
}
Run Code Online (Sandbox Code Playgroud)
测试功能
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");
}
Run Code Online (Sandbox Code Playgroud)
data数组中可以有多个节点,这就是为什么我试图在结构中提到数组,但似乎它没有正确映射.任何帮助将不胜感激:-)
Far*_*han 53
幸运的是,玩了不同的选择我已经解决了这个问题.如果我们要匹配数组中的嵌套对象,则期望'*'作为键.我们可以在这里看到参考.
我为array of对象设置了这样的结构
$response->assertJsonStructure([
'status',
'message',
'data' => [
'*' => [
'id',
'name',
'email',
'created_at',
'updated_at',
'user_id'
]
]
]);
Run Code Online (Sandbox Code Playgroud)
如果你想只匹配一个对象
$response->assertJsonStructure([
'status',
'message',
'data' => [
[
'id',
'name',
'email',
'created_at',
'updated_at',
'user_id'
]
]
]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5980 次 |
| 最近记录: |