Je crée un test unitaire et souhaite tester la structure JSON
renvoyée dans la réponse. Je sais que TestResponse
fournit une méthode assertJsonStructure
pour correspondre à la structure de votre réponse JSON
. Mais pour une raison quelconque, je ne peux pas mapper le $structure
à ma réponse et le test échoue. Permettez-moi de partager les extraits requis.
Réponse du point final
{
"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
}
]
}
Fonction de test
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");
}
Il peut y avoir plusieurs nœuds dans le tableau data
, c'est pourquoi j'ai essayé de mentionner le tableau dans la structure, mais il semble qu'il ne mappe pas correctement.Toute aide serait appréciée :-)
Heureusement, en jouant avec différentes options, j'ai résolu ce problème. Un "*" est attendu comme clé si nous devons faire correspondre un objet imbriqué dans un tableau. Nous pouvons voir la référence ici.
Source: TestResponse - ligne # 36
J'ai défini la structure comme ceci pour array of
objets`
$response->assertJsonStructure([
'status',
'message',
'data' => [
'*' => [
'id',
'name',
'email',
'created_at',
'updated_at',
'user_id'
]
]
]);
Et si vous voulez faire correspondre un seul objet
$response->assertJsonStructure([
'status',
'message',
'data' => [
[
'id',
'name',
'email',
'created_at',
'updated_at',
'user_id'
]
]
]);
Je pense que vous devriez utiliser:
$response->assertJsonStructure([
'status',
'message',
'data' => [
[ // change here
'id',
'name',
'email',
'created_at',
'updated_at',
'user_id'
] // change here
]
]);