Unit Testing (PHPUnit): Wie sich anmelden?
-
05-07-2019 - |
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?
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.