Fehlgeschlagener Unit-Test des Controllers zur Überprüfung der erfolgreichen Anmeldung in Laravel 4.2

9

Ich prüfe, ob eine erfolgreiche Anmeldung erfolgt oder nicht. Dafür überprüfe ich,

  • Wenn erfolgreich angemeldet
  • Die Anwendung sollte zum Dashboard
    umleiten

Dafür sieht mein controller so aus

%Vor%

Und mein test sieht so aus

%Vor%

Obwohl dies im Browser funktioniert. Aber während des Tests schlägt es mit der folgenden Meldung fehl:

  

BadMethodCallException: Methode Mothelery_0_Illuminate_Auth_AuthManager :: check () existiert nicht für dieses Mock-Objekt

    
Nirmalz Thapaz 16.03.2015, 06:24
quelle

3 Antworten

1

Sie haben die Definition Ihrer Route nicht angezeigt, aber ich nehme an, dass Ihre login Route durch den guest before Filter geschützt ist. Dieser Filter verwendet Auth::check() , bevor er an die Route gesendet wird.

Wenn Sie in Ihrem Test Auth::shouldReceive() aufrufen, wird der Auth -Fassadenpunkt auf eine mockige Instanz gesetzt. Da Sie für die Methode check() keine Erwartung für die mocked-Instanz definiert haben, erhalten Sie einen Fehler.

Die einfachste Lösung wäre, die Auth::check() -Methode ebenfalls vorzuspielen und false zurückzugeben (um zu emulieren, dass die Route besucht wird, während sie nicht eingeloggt ist).

%Vor%

Sie könnten auch einen zweiten Test mit Auth::check() mocked schreiben, um true zurückzugeben, um zu testen, was passiert, wenn Sie Ihre Login-Route besuchen, während Sie bereits eingeloggt sind.

    
patricus 24.10.2017 20:46
quelle
1

Meiner Meinung nach ist dies ein Funktionstest, kein Unit-Test. Es ist absolut nicht nötig, dass Sie sich über Klassen lustig machen. Sie müssen dafür einen Funktionstest schreiben.

Wenn ich es tun müsste, würde ich so etwas tun:

  • Senden Sie eine Postanfrage an die Login-Route mit Benutzername, Passwort, csrf_token etc.
  • Stellen Sie sicher, dass die Seite zu einem Link weitergeleitet wird. angenommen: http://localhost/home

Ihr Testcode in Laravel 4.2 wird also etwa so aussehen:

%Vor%     
Raza Mehdi 25.10.2017 16:01
quelle
0

Vielleicht stackoverflow thread könnte helfen.

Als Nebenbemerkung: Ich stimme @Raza Mehdi zu.

Ich denke, das Testen der Anmeldefunktion von einer höheren Ebene, testet unseren tatsächlichen Code, anstatt das Auth -Objekt (ein Typ, den wir nicht besitzen) auszuspionieren.

  • Rufen Sie die Anmeldungsroute auf und geben Sie die Benutzeranmeldeinformationen weiter.
  • Stellen Sie sicher, dass der Status OK ist.
  • Stellen Sie sicher, dass der Benutzer zum Dashboard weitergeleitet wird.

Im Code:

%Vor%     
joshuamabina 26.10.2017 12:48
quelle