Laravel 4 phpunit test: Test als 'riskant' markiert, weil die eigenen Ausgabepuffer nicht geschlossen werden

8

Ich habe ein Problem beim Testen eines einfachen Illuminate \ Http \ Response-Objekts in einem PHP-Test. Der fragliche Fehler ist:

%Vor%

wobei das R angezeigt wird, wenn phpunit --tap als

ausgeführt wird %Vor%

Die Klasse, die ich testen möchte, ist:

%Vor%

und der Test ist

%Vor%

Beachten Sie, dass beim Testen einer Route in meiner App mit dem Laravel

derselbe Fehler auftritt

this->route('GET','routeName')

Hilfsmethode, so scheint dies ein allgemeiner Fehler im Zusammenhang mit der Antwortanforderung zu sein. Soweit ich mir das vorstellen kann, gibt es nichts in meiner Anwendung, das etwas mit der Ausgabepufferung (absichtlich) funky macht, was die einzige Sache ist, die ich mir vorstellen kann, die die Standardarbeit der Antwortklasse durcheinander bringen könnte. p>

Ich benutze phpunit 4.3-dev, laravel 4.2.1 und Spott für die Tests.

Ich habe im Internet in Bezug auf diesen speziellen riskanten Fehlercode nicht viel gefunden, so dass ich ohne weitere Hilfe ratlos bin.

    
Inaki 25.06.2014, 10:04
quelle

5 Antworten

8

Nicht gut genug eingeschlossener ternärer Operator (?)

Ich hatte das gleiche Problem mit einem riskanten Testfall beim Testen in Laravel 5. Das Problem hier war, dass ich einen Code wie den folgenden in meiner Navigation hatte (Standardlayout-Datei):

%Vor%

Der Test hat diesen Abschnitt nicht gefallen, weil der ternäre Operator ( ? ) nicht gut genug geschlossen wurde. Ich ersetzte es durch das Folgende, um es zum Laufen zu bringen (hinzugefügte Klammern um den ternären Operatorabschnitt):

%Vor%

Ich habe dies gefunden, indem ich die Blade-Syntax Stück für Stück aus der angeforderten Ansicht, dem Layout, das sie erweitert hat, und den enthaltenen Dateien entfernt habe. An dem Punkt, an dem die obige Syntax entfernt wurde, funktionierte es, also gab es den Fehler.

Leerer Ertrag / Abschnitt

Derselbe Fehler ist aufgetreten, als ich einen leeren Wert für einen Ertrag übergeben habe, zB wie im folgenden Szenario:

layout.blade.php

%Vor%

page.blade.php

%Vor%

Andere Dinge zu beachten

Vielleicht klar, aber nur für den Fall, dass Sie den gleichen Fehler gemacht haben: Sie müssen alle beteiligten Dateien überprüfen.

Ich hatte den folgenden Test ausgeführt, der die Anmeldeseite besucht, E-Mail und Passwort eingibt und den Login-Button drückt:

Tests / AuthenticationTest.php

%Vor%

app / Http / routes.php

%Vor%

app / Http / Controller / Auth / AuthController.php

%Vor%

Also musste ich besonders die folgenden Dateien überprüfen, wo ich Änderungen vorgenommen habe:

  • app / Http / routes.php
  • app / Http / Controller / Auth / AuthController.php - & gt; Funktion getLogin
  • Ressourcen / Ansichten / auth / login.blade.php (zurückgegeben in Auth \ AuthContoller @ getLogin)
  • app / Http / Controller / Auth / AuthController.php - & gt; Funktion postLogin
  • resources / views / dashboard2.blade.php (zurückgegeben bei erfolgreicher Anmeldung)
Alexander Taubenkorb 04.11.2015 09:56
quelle
6

Passiert auch in Laravel 5.
PHPUnit wird dies werfen, wenn das Antwortformat nicht korrekt ist.

Es könnte sein aufgrund:

  • Fehler in der Laravel App: Protokolle überprüfen
  • Falsche Blade-Syntax: In meinem Fall zum Beispiel gab es ein übermäßiges Blade @stop , das von Laravel nicht als Fehler angesehen wurde (und nicht protokolliert wurde)
younes0 02.07.2015 09:55
quelle
1

Es stellt sich heraus, dass das Problem auf die fragliche Ansicht zurückzuführen ist, indem Sie

verwenden

Input::old()

in einem Formular. Nach dem Versuch, einfach auf Input::old('foo') in einem PHP-Test zuzugreifen, habe ich ein

RuntimeException: Session store not set on request.

Der wahre Schuldige war also im Sessions-Store in meinen Unit-Tests statt in jedem Request / View-Render-Problem. Das Problem wurde gelöst, indem der Sitzungsspeicher für die aktuelle Anforderungsinstanz in der Methode testRender () festgelegt wurde:

\Illuminate\Support\Facades\Request::setSession($this->app['session.store'])

    
Inaki 26.06.2014 08:07
quelle
1

Ich habe die gleiche Fehlermeldung von PhpUnit gefällt Ihnen .. Ich habe '@stop' auf falsche Zeile in Sicht (Blade) -Datei geschrieben .. Ich habe bearbeitet, indem Sie nach rechts '@stop' nach rechts und dann PHPUnit Tests nach oben bewegt ist bestanden!

Versuchen Sie, Ihren @ section @ stop-Block in Ihren Blade-Dateien zu überprüfen.

    
MURATSPLAT 16.07.2015 13:50
quelle
0

Ich hatte ein sehr ähnliches Problem. Das Problem war, dass ich versuchte, die Eigenschaft von Nicht-Objekt (NULL) in der Ansicht zu erhalten, aber anstelle von PHP-Fehler 'Versuch, Eigenschaft von Nicht-Objekt zu bekommen' phpunit zeigte 'OK, aber unvollständige, übersprungene oder riskante Tests!' .

Wenn Sie also das gleiche Problem haben, prüfen Sie diese Art von Fehlern in der View-Datei.

    
Robert Trzebiński 19.11.2014 12:17
quelle

Tags und Links