2016-07-15 3 views
2

Ich implementiere einige Tests für eine Website. In einem speziellen Test dieses Ergebnis aufgetreten:phpunit - Hilfe über riskante Tests benötigt

{ 
"event": "test", 
"suite": "Example_V_test", 
"test": "Example_V_test::test_3", 
"status": "error", 
"time": 13.469105958939, 
"trace": [ 
    { 
     "file": "\/opt\/lampp\/htdocs\/buy\/application\/tests\/phpunit.phar", 
     "line": 569, 
     "function": "main", 
     "class": "PHPUnit_TextUI_Command", 
     "type": "::" 
    } 
], 
"message": "Risky Test: Test code or tested code did not (only) close its own output buffers", 
"output": "" 
}R                 3/3 (100%) 

Time: 25.76 seconds, Memory: 59.25MB 

There was 1 risky test: 

1) Example_V_test::test_3 
Test code or tested code did not (only) close its own output buffers 

/opt/lampp/htdocs/buy/application/tests/phpunit.phar:569 

OK, but incomplete, skipped, or risky tests! 

Meine Frage ist: Wie die Codezeile finden, das dieses ‚Problem‘ bewirken?

+0

Sie können es im Fehlerprotokoll finden testete. –

+0

Wo finde ich das Fehlerprotokoll? Ich teste eine Seite, die mit codeigniter erstellt wurde und fand sie nicht in dem Verzeichnis, das die Datei phpunit.phar enthält, d. H .:/opt/lampp/htdocs/codeigniter/application/tests. Außerdem schaue ich in den codeigniter/application/log Ordner und hier wird keine Ausgabe von phpunit getestet. – bobc82

+0

/var/log/apache2/Fehlerprotokoll. Probieren Sie es aus, Bruder. xD –

Antwort

5

Die Nachricht wird gemeldet, wenn PHPUnit feststellt, dass die Ausgabepufferstufe am Ende einer Testmethode sich von der Ebene am Anfang unterscheidet. Dies liegt an der Tatsache, dass es einen eigenen Ausgabepuffer verwendet und überprüft, dass der Test keine Ausgabe erzeugt.

Da es in PHPUnit keine Option gibt, dies zu ignorieren, müssen Sie den Grund finden, warum die Ausgabepufferung in Ihrem Code gestartet wurde, aber nicht beendet (oder zu viel beendet) und behoben wurde.

Das könnte sehr schwer zu erreichen sein, weil es keinen Hinweis gibt, wo die Pufferung der Ausgabe gestartet wird, aber Sie können eine Volltextsuche in Ihrem Quellcode (und libs) verwenden, um Kandidaten zu identifizieren. Suchen Sie dann nach Exceptions, die den normalen Programmablauf unterbrechen und so verhindern können, dass ob_end_flush() (oder Ähnliches) aufgerufen wird.

+0

Ich überprüfte ob_get_level() Wert am Ende des getesteten Codes und es gibt 2. Nun werde ich untersuchen darauf. Vielen Dank für Ihre Antwort! – bobc82

1

Ich löste das gleiche Problem, nur die Flagge @stop der Ansicht verwenden, die ich

Schreiben Sie einfach @stop nach Abschnitt

@section ('content') @ stop 
... 
@endsection