• Jeder User im Forum verpflichtet sich zur Akzeptanz und zur Einhaltung dieser Regeln:
    1. Umgangston
      Ein angemessener höflicher Umgangston, ohne Beleidigungen, Beschimpfungen und aggressive Postings ist für jedes Mitglied Pflicht.
    2. Beiträge
      Jedes Mitglied sollte sich bemühen nur sinnvolle Beiträge zum Thema zu posten. Dabei ist unbedingt vorher zu prüfen, ob das Thema vorher schon einmal diskutiert wurde und daher fortgesetzt werden kann
      • Suchfunktion benutzen!
      • offizielle Doku lesen!
    3. Haftung
      Jeder Beitragsersteller übernimmt die alleinige Verantwortung seiner Inhalte.
    4. Werbung
      Wir erlauben keine Beiträge, Signaturen, Private Nachrichten oder eMails an Benutzer, die Werbung enthalten. Ausgenommen
      sind Stellengesuche /-angebote, welche ausschließlich im Forum "Stellengesuche" veröffentlicht werden dürfen.
    5. Verstöße
      Regelwidrige Beiträge sollten dem Team gemeldet werden. Nach deren Überprüfung werden wir schnellstmöglich
      entsprechend handeln.
    6. Authorität
      Den Anweisungen der Team-Mitglieder (Administratoren und Moderatoren) sind in diesem Forum Folge zu leisten.
      Bei Fragen oder Beschwerden bitte an diese wenden.
    Wir möchten Euch darauf aufmerksam machen, dass es bei Verstößen gegen einen oder mehreren der oben genannten
    Punkte dem Team frei steht entsprechend zu handeln. Dies kann z.B. das Löschen eines Beitrags, das Ausschliessen bzw.
    Sperren von Mitgliedern oder aber lediglich eine Verwarnung sein.

    In diesem Zusammenhang sollte erwähnt werden, dass das Forum automatisch die IP-Adresse jedes Beitrag-Erstellers
    speichert. Bei schweren Vergehen, behalten wir es uns vor, die IP-Adresse zur Strafverfolgung weiterzugeben.
  • Willkommen im Zend Framework Forum

    ZF1 Zend Framework 1 + ZF2 Zend Framework 2

    Das Zend Framework Forum ist seit 2006 die erste Anlaufstelle für Zend Framework Entwickler in Deutschland. Mit über 70.000 Beiträgen und einer steigenden Nutzerzahl bietet das Forum hilfreiche Themen und ZF-Tutorials für professionelle Entwickler, fortgeschrittene Programmierer sowie Zend Framework Einsteiger.
    Wenn dies Dein erster Besuch in der Zend Framework Community ist, lies bitte zuerst die Hilfe - FAQ durch. Du musst Dich registrieren, bevor Du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um die Registrierung zu starten. Du kannst auch jetzt schon Beiträge lesen. Hier im Forum findest Du die Zend Framework Hilfe, die Du suchst!

    Grüße an alle Zend Framework Entwickler. Das Team vom Zend Framework Forum!

    Drupal Agentur

PHPUnit - HttpControllerTestCaseTrait getCsrfValue() - Cannot get DOMDocument

rainman1983

New member
Hallo Ralf,

ich verwende für die Unit Tests auch die HttpControllerTestCaseTrait.php. Dies hat mir noch eine größere Flexibilität beim Testen gegeben.

Leider funktioniert jetzt eine Funktionalität nach dem jüngsten Update von PHPUnit auf 6.2.2 nicht mehr.

In meinen Formularen habe ich jeweils den CSRF-Code eingebaut. Das die Formulare auch valide geprüft werden können, benötige ich natürlich den CSRF-Code, so dass das Formular auch Valide ist.

Mein Ergebnis beim Unit-Tests:
Code:
./vendor/bin/phpunit 
PHPUnit 6.2.2 by Sebastian Bergmann and contributors.

E                                                                   1 / 1 (100%)

Time: 875 ms, Memory: 16.00MB

There was 1 error:

1) XXTest\Controller\LoginControllerTest::testIndexActionSuccessfullyHandling
Zend\Dom\Exception\RuntimeException: Cannot get DOMDocument; no document registered

/xx/vendor/zendframework/zend-dom/src/Document.php:155
/xx/module/Application/test/HttpControllerTestCaseTrait.php:112
/xx/module/AdminUser/test/Controller/LoginControllerTest.php:35

ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
Der dazugehörige Test-Case sieht wie folgt aus:
PHP:
public function testIndexActionSuccessfullyHandling()
        {
            $sUrl = '/de/user/login';

            $sCSRF = $this->getCsrfValue('user_login_form');

            $aPostArray = array('csrf'       => $sCSRF,
                                'username'   => '33330014',
                                'password'   => '12345678',
                                'login_user' => 'Login');

            $this->dispatch($sUrl, 'POST', $aPostArray);
            $this->assertResponseStatusCode(200);

            $this->assertMatchedRouteName('admin-user/login');
            $this->assertModuleName('adminuser');
            $this->assertControllerName(LoginController::class);
            $this->assertControllerClass('LoginController');
            $this->assertActionName(LoginResource::PRIVILEGE_INDEX);
        }
Es geht dabei um die folgende Zeile in der HttpControllerTestCaseTrait: https://github.com/zf3buch/zendframework-center/blob/chapter_18_01/module/Application/src/Test/HttpControllerTestCaseTrait.php#L145

Was mir nicht klar ist, warum auf einmal die Methode $this->getResponse()->getBody() kein Ergebnis mehr zurück liefert?

Wie bekomme ich dies wieder zum Laufen?
 
Zuletzt bearbeitet:

Ralf

New member
Hallo,

ich vermute mal, das Problem liegt daran, dass du getCsrfValue() schon vor dem dispatch() aufrufst. Die Methode ist dafür gedacht, den Wert zu ermitteln, nachdem die Verarbeitung stattgefunden hat.

Gruß,

Ralf
 

Kaiuwe

Super-Moderator
Die Methode ist dafür gedacht, den Wert zu ermitteln, nachdem die Verarbeitung stattgefunden hat.
Eine Ausnahme vom Typ „Zend\Stdlib\Exception\LogicException“ verwerfen?

(Übrigens hat dein Trait ein großes Problem: eine versteckte und komplette Abhängigkeit zu „Zend\Test\PHPUnit\Controller\AbstractControllerTestCase“ – dies Abhängigkeiten sind ein sehr häufiges Problem von Traits und auch ein Hauptargument gegen Traits.)
 

Ralf

New member
Ja, der Trait soll eigentlich zum Nachdenken und Ausprobieren dienen, wie alles im Buch, und erhebt nicht den Anspruch auf eine perfekte Lösung für alle Anwendungsfälle. Wobei das Schreiben eines Traits für das Schreiben von Tests für Zend Framework Controller kann durchaus Sinn machen. Aber du hast Recht, die Abhängigkeit ist etwas unglücklich.
 

Kaiuwe

Super-Moderator
Wobei das Schreiben eines Traits für das Schreiben von Tests für Zend Framework Controller kann durchaus Sinn machen. Aber du hast Recht, die Abhängigkeit ist etwas unglücklich.
Ich wollte den Sinn der Funktionalität selber gar nicht kritisieren, nur darauf hinweisen, dass hier das typische Problem der Abhängigkeiten innerhalb von Traits auftritt.
„In freier Wildbahn“ ist häufig zu sehen, dass bei Tests nicht immer die gleiche Strenge bei der Code-Qualität angesetzt wird, wie bei zu testendem Code. Hier zählt oft nur das (schnelle) Resultat.
 
Oben