2016-07-13 15 views
0

Hallo, ich bin versucht, API zu testen und das spezifische json Element aus der Antwort zu bekommen, hier ist die Antwort von der API:Wie Zufallswert in JsonArray testen phpunit mit

{ 
    "Error": null, 
    "Data": { 
    "AuthToken": "jaskdfjlsadkfjasd", 
    "InactiveTimeout": 20 
    } 
} 

, da dem Wert von authToken ist immer zufällig ich kann es nicht testen, mit diesem Code:

$this->post('/login', 
    [ 
     'id'=>'1', 
     'password'=>'secret', 
    ])->seeJson([ 
     "Error" => null, 
     'Data'=>array(
     'AuthToken'=>'', 
     'InactiveTimeout'=>20) 
     ]); 

und ich habe versucht, mit diesem Code:

$this->post('/login', 
    [ 
     'id'=>'1', 
     'password'=>'secret', 
    ])->seeJson([ 
     "Error" => null, 
     'Data'=>array(
     'InactiveTimeout'=>20) 
     ]); 

aber ich kann den Test nicht bestehen, meine Frage ist, wie man Test für diesen Fall schreibt? Danke für Ihre Hilfe.

+0

Eine Sache, die ich tun würde mit PHPUnit würden die Werte werden verglichen mit Arrays mit 'assertArraySubset'. Siehe hierzu [link] (https://phpunit.de/manual/current/de/appendixes.assertions.html#appendixes.assertions.assertArraySubset) Auf diese Weise können Sie vergleichen, ob ein Array innerhalb des anderen liegt. –

+0

Vielleicht können Sie 'seeJson' für' Error' und 'seeJsonStructure' für' AuthToken' verwenden. – i906

+0

@ i906 ja, mit Ihrem Vorschlag wird der Trick, danke, aber gibt es einen saubereren Weg, dies zu erreichen? wenn nicht, dann muss ich zwei Tests für diese Art von Antwort schreiben –

Antwort

2

Sie können den Code unten versuchen:

$this->post('/login', [ 
     'id' => '1', 
     'password' => 'secret', 
    ]) 
    ->seeJson([ 
     'Error' => null 
    ]) 
    ->seeJsonStructure([ 
     'Data' => [ 
      'AuthToken' 
     ] 
    ]);