2017-07-31 3 views
1

Je ne parviens pas à POST des tableaux multidimensionnels dans mes tests Laravel. Tableaux à une dimension POST fin. Peut-être que je devrais utiliser une autre fonction en utilisant json_encode, mais je ne trouve rien pour supporter cela.Comment poster un tableau multidimensionnel dans un test de Laravel?

Il est important que je puisse poster la structure de données ci-dessous, j'ai ajouté dans mon assertion seeJSONStructure() pour mieux illustrer la structure de données.

Voici un exemple de mon test:

$this->json('POST', '/endpoint', [ 
    'foo' => 'foo', 
    'bar' => [ 
     [ 
      'foo' => 'foo', 
      'bar' => 'bar' 
     ] 
    ] 
]) 
->assertResponseStatus(200) 
->seeJsonStructure([ 
    '*' => [ 
     'foo', 
     'bar' => [ 
      '*' => [ 
       'foo', 
       'bar' 
      ] 
     ] 
    ] 
]); 

Cela me donne l'erreur

PHPUnit_Framework_Exception: Argument #2 (No Value) of PHPUnit_Framework_Assert::assertArrayHasKey() must be an array or ArrayAccess 

Suppression du tableau imbriqué empêche l'erreur, mais il doit y avoir un moyen de POST tableaux multidimensionnels .

Les travaux ci-dessous bien:

$this->json('POST', '/endpoint', [ 
    'foo' => 'foo', 
    'bar' => 'bar' 
]) 
->assertResponseStatus(200) 
+0

Cochez cette case 'bar => 'bar' ajouter guillemet simple –

+0

'' foo => 'foo',' et ' 'bar => 'bar'' Est-ce une faute de frappe? – Nawin

+0

Désolé les guillemets simples manquants étaient une faute de frappe dans mon exemple et pas le vrai problème – Elliot

Répondre

0

remplacer votre code de test avec ci-dessous:

$this->json('POST', '/endpoint', [ 
    'foo' => 'foo', 
    'bar' => [ 
     [ 
      'foo' => 'foo', 
      'bar' => 'bar' 
     ] 
    ] 
]) 
->assertResponseStatus(200) 
+0

Qu'est-ce qui a changé dans votre réponse? – Nawin

+0

@Nawin: Correction de l'erreur OP dans le code –

+0

Maintenant même que ce que @Elliot donne ... – Nawin

0

Selon le documentassertArrayHasKey() nécessité de donner la clé pour un tableau ... Essayez comme ça Non testé ... Et vérifiez aussi que votre chemin endpoint était correct.

$this->json('POST', '/endpoint', [ 
    'foo' => 'foo', 
    'bar' => [  
      'baz'=>[ 
        'foo' => 'foo', 
        'bar' => 'bar' 
        ] 
    ] 
]) 
->assertResponseStatus(200) 

Modifié: Nouveau code pour le JsonStructure

$this->json('POST', '/endpoint', [ 
    'foo', 
    'bar' => [  
      '*'=>[ 
        'foo', 
        'bar' 
        ] 
    ] 
]) 
+1

Merci d'avoir souligné cela, mais mon API s'attend à ce que la barre soit un tableau d'objets. J'ai mis à jour ma question pour inclure l'assertion de ma structure de clé pour que ce soit plus clair. Comment puis-je poster cette structure de données? – Elliot

+0

@Elliot vous demandez comme jsonStructure droite alors cela pourrait être le travail – Nawin