2016-08-02 19 views
0

Ich bin neu im Komponententest und versuche nun, einige Testfälle mit PHPUnit für eine Laravel-Anwendung zu schreiben. Ich habe einen grundlegenden Test gemacht, der der folgenden ähnelt:Testen von Ausnahmen in PHPUnit

public function testGetPointsByApp() 
{ 
    $this 
     ->json(
      'GET', 
      self::URL.'/'.$value 
     ) 
     ->assertResponseStatus(200) 
     ->seeJson([ 
      'status' => 'success', 
     ]) 
     ->seeJsonStructure([ 
      'status', 
      'message', 
      'data' => [] 
     ]); 
} 

Jetzt funktioniert das. Aber ich würde gerne wissen, wie ich auf ungültige Eingaben testen kann und für die Fälle wie es überhaupt keine Daten mit den gegebenen Parametern gibt. Ich werfe entsprechende Ausnahmen in jedem dieser Fälle und es wird bestimmte Nachrichten hinzufügen. Wie kann ich testen, ob es geworfen wird?

Ich möchte es nicht in diese Methode aufnehmen und möchte einige andere Methoden schreiben, um verschiedene Szenarien in der API wie ungültige UUID, keine Daten usw. zu testen. Also für jedes Mal muss ich die API-URL aufrufen oder dieser Anruf kann von jeder Art von Einrichtungsfunktion aus durchgeführt werden?

Antwort

0

Ich kenne Laravel nicht, aber in PHPUNIT können Sie testen, ob die Ausnahme mit ExpectException-Funktion ausgelöst wird. Zum Beispiel für InvalidArgumentException

$this->expectException(InvalidArgumentException::class); 

können Sie auch Anmerkung @expectedException und es gibt auch eine Menge Dinge, die in Ausnahme wie expectExceptionCode() usw. getestet werden können

Mehr Sie here

0

Da Sie finden Ich mache keinen Unit-Test (diese Art von Test, die Sie tun, ist ein Abnahmetest), Sie können nicht für die Ausnahme selbst suchen, Sie werden eine schlechte Antwort suchen:

$this 
    ->json(
     'GET', 
     self::URL.'/'.$BAD_VALUE 
    ) 
    ->assertResponseStatus(422) 
    ->seeJson([ 
     /* Whatever you want to receive at invalid request */ 
    ]) 
    ->seeJsonStructure([ 
     /* Whatever you want to receive at invalid request */ 
    ]); 

Laravel Validierungsfehler gibt 422 - nicht verarbeitbare Einheit HTTP-Code zurück.

Sie können die Antwort auch auf Ihre erwarteten Fehlermeldungen oder etwas anderes überprüfen.

+0

Beim Auslösen der Ausnahme bekomme ich beim Testen über Postman tatsächlich den Fehlercode 417. Es ist tatsächlich Erwartung gescheitert. –

Verwandte Themen