web-dev-qa-db-fra.com

Laravel / PHPUnit: affirmer que l'élément json existe sans définir la valeur

J'envoie une demande de publication dans un cas de test, et je veux affirmer qu'un élément spécifique, disons avec la clé 'x' existe dans la réponse. Dans ce cas, je ne peux pas dire seeJson(['x' => whatever]); car la valeur m'est inconnue. et pour sûr, je ne peux pas le faire avec seeJson(['x']);.

Y a-t-il un moyen de résoudre cela?

Si cela importe: Laravel: v5.2.31 PHPUnit: 5.3.4

16
Milad.Nozari

Bien que ce ne soit pas optimal du tout, j'ai choisi d'utiliser ce code pour tester la situation:

$this->post(URL, PARAMS)->see('x');

X est un nom hypothétique, et la clé d'élément réelle a peu de chances d'apparaître dans le reste des données. sinon cette solution de contournement désagréable ne serait pas pratique.

METTRE À JOUR:

Voici la solution pour le faire correctement:

public function testCaseName()

{
    $this->post(route('route.name'), [
        'param1' => 1,
        'param2' => 10,
    ], [
        'headers_if_any' => 'value'
    ]);

    $res_array = (array)json_decode($this->response->content());

    $this->assertArrayHasKey('x', $res_array);
}
4
Milad.Nozari

Qu'il soit utile à quiconque. Vous pouvez écrire ce test pour votre structure json de réponse de contrôle

$this->post('/api/login/', [
        'email' => '[email protected]',
        'password' => '123123123',
    ])->assertJsonStructure([
        'status',
        'result' => [
            'id',
            'email',
            'full_name',
        ],
    ]);
17
Илья Савич