Frage

Ich bin Tests für ein aktuelles Projekt zu schreiben, die mit Zend Framework. Alles ist in Ordnung, aber ich habe ein Problem, das Testen der angemeldeten Benutzer Aktionen / Controller. Ich muss angemeldet sein, um die Aktion / Controller ausführen

Wie kann ich in PHPUnit angemeldet sein?

War es hilfreich?

Lösung

Wie Sie sagen, Sie Aktionen / Controller testen wollen, ich nehme an, Sie nicht Komponententests sind writting, aber funktional / Integrationstests -. Dh das Arbeiten mit Zend_Test und Tests über die MVC

Hier ist eine Test-Funktion, die ich in einem Projekt verwendet, wo ich, wenn die Anmeldung bei der Prüfung bin ist OK:

public function testLoggingInShouldBeOk()
{
    $this->dispatch('/login/login');
    $csrf = $this->_getLoginFormCSRF();
    $this->resetResponse();
    $this->request->setPost(array(
        'login' => 'LOGIN',
        'password' => 'PASSWORD',
        'csrfLogin' => $csrf,
        'ok' => 'Login',
    ));
    $this->request->setMethod('POST');
    $this->dispatch('/login/login');
    $this->assertRedirectTo('/');
    $this->assertTrue(Zend_Auth::getInstance()->hasIdentity());
}

einfach. Ich bin das Login-Formular laden, die CSRF-Token zu extrahieren, bevölkert das Formular aus, und veröffentlicht es

Dann kann ich testen, ob ich verbunden bin.


Damit können Sie wahrscheinlich den Logging-Teil extrahieren, es zu nennen, bevor jeder Ihrer Tests, die einen gültigen Benutzer benötigen wird angemeldet.

Andere Tipps

Es gibt eine andere Art und Weise. Auf meiner User Einheit habe ich eine login() Methode, die die Benutzer-ID in die Sitzung und eine statische Variablen setzt. Was ich gerade in dem Test setUp() ist Aufruf $user->login() und es funktioniert. In Testumgebung Sitzungen nicht verwendet werden (Zend_Session::$isUnitTested = true Einstellung hat diesen Effekt) und Tests beruhen auf den statischen Variablen. Denken Sie daran, die statische Variable löschen (logout() den Benutzer) auf tearDown().

Ich denke, dieser Artikel könnte Ihnen helfen: http://perevodik.net/en/posts/7/ Es beschreibt, wie eine gefälschte Identität erstellen, können Sie die Umgebung in einem Zustand entspricht einen Benutzer festgelegt verwenden, um zu werden angemeldet.

In der gleichen Weise, Pascal diese Funktion verwendet:

$this->_getLoginFormCSRF();

Ich habe eine generische Funktion erstellt, die den Wert zurückgibt das Formular Laden des Formular-Element-Manager:

  

public function _getCSRFHashValueFromForm ($ formAlias, $ csrfName) {       $ Form = $ this-> servicemanager-> get ( 'FormElementManager') -> get ($ formAlias);       return $ form-> get ($ csrfName) -> getValue (); }

Dies setzt natürlich voraus, dass die CSRF an die Form gebunden ist und nicht innerhalb eines fieldset etc.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top