turk porno porno escort rokettube
Ergebnis 1 bis 5 von 5

Thema: PHPUnit - HttpControllerTestCaseTrait getCsrfValue() - Cannot get DOMDocument

  1. #1
    Erfahrener Benutzer
    Registriert seit
    05.09.2008
    Beiträge
    321
    Thanks
    0
    Thanked 3 Times in 1 Post

    Standard PHPUnit - HttpControllerTestCaseTrait getCsrfValue() - Cannot get DOMDocument

    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-Code:
    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/zendframe...Trait.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?
    Geändert von rainman1983 (02.07.2017 um 10:26 Uhr)

  2. #2
    Erfahrener Benutzer Avatar von Ralf
    Registriert seit
    14.12.2006
    Beiträge
    450
    Thanks
    0
    Thanked 47 Times in 37 Posts

    Standard

    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

  3. #3
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von Ralf Beitrag anzeigen
    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\AbstractController TestCase“ – dies Abhängigkeiten sind ein sehr häufiges Problem von Traits und auch ein Hauptargument gegen Traits.)
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  4. #4
    Erfahrener Benutzer Avatar von Ralf
    Registriert seit
    14.12.2006
    Beiträge
    450
    Thanks
    0
    Thanked 47 Times in 37 Posts

    Standard

    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.

  5. #5
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von Ralf Beitrag anzeigen
    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.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

Ähnliche Themen

  1. PHPUnit 4.x - Aufrufen?
    Von rainman1983 im Forum Testing & Deployment
    Antworten: 1
    Letzter Beitrag: 06.05.2014, 21:43
  2. DomDocument removeChild() Error ?
    Von 11&2 im Forum Einsteigerfragen
    Antworten: 12
    Letzter Beitrag: 21.04.2009, 15:56
  3. domdocument::domdocument() expects parameter 2 to be long
    Von Innocentus im Forum Einsteigerfragen
    Antworten: 8
    Letzter Beitrag: 06.03.2009, 18:25
  4. PHPUnit shell_exec
    Von ice-breaker im Forum Testing & Deployment
    Antworten: 4
    Letzter Beitrag: 31.07.2008, 20:13
  5. PHPUNIT install
    Von TeeJay im Forum Testing & Deployment
    Antworten: 13
    Letzter Beitrag: 07.07.2008, 13:06

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •