2016-05-16 7 views
3

Ich sende eine Post-Anfrage in einem Testfall, und ich möchte behaupten, dass ein bestimmtes Element, sagen wir mit Schlüssel 'x' in der Antwort existiert. In diesem Fall kann ich nicht seeJson(['x' => whatever]); sagen, weil der Wert mir unbekannt ist. und sicher kann ich es nicht mit seeJson(['x']); tun.Laravel/PHPUnit: Assert json Element existiert, ohne den Wert zu definieren

Gibt es eine Möglichkeit, dies zu lösen?

Wenn es darauf ankommt: Laravel: v5.2.31 PHPUnit: 5.3.4

+0

Warum haben Sie nicht versucht, Antwortobjekt auszugeben? – zhilevan

+0

@zhilevan: Ich wusste nicht, ich könnte :-) –

+0

'dump()' ist eine void-Methode. Wenn ich es benutzen könnte, müsste ich 'ob_start()' und 'ob_get_clean()' verwenden. Ich muss überprüfen und sehen, ob ich das in einem Test verwenden kann. –

Antwort

1

Obwohl es gar nicht optimal ist, wählte ich diesen Code zu verwenden, um die Situation zu testen:

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

X ist ein hypothetischer Name, und der tatsächliche Elementschlüssel hat eine geringe Chance, in den restlichen Daten aufzutauchen. andernfalls wäre diese fiese Lösung nicht praktikabel.

UPDATE:

Hier ist die Lösung, es richtig zu tun:

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); 
} 
+0

padding wahr als der zweite Parameter zu json_decode wird die Werte als Array zurückgeben '' 'json_decode ($ this-> response-> content(), true)' '' http://php.net/json_decode – zaherg

3

Kann es für jemand anderen nützlich sein wird. Sie können diesen Test für Ihre Prüfantwort schreiben. Json structure

$this->post('/api/login/', [ 
     'email' => '[email protected]', 
     'password' => '123123123', 
    ])->seeJsonStructure([ 
     'status', 
     'result' => [ 
      'id', 
      'email', 
      'full_name', 
     ], 
    ]); 
+2

Vielen Dank, das funktioniert .. Beachten Sie beim Schreiben Laravel [HTTP Tests] (https : //laravel.com/docs/5.4/http-tests), es ist '$ response-> assertJsonStructure (array $ structure);' – Stetzon