Pregunta

Estoy escribiendo pruebas para mi proyecto actual, hecho con Zend Framework. Todo está bien, pero tengo un problema al probar las acciones / controladores de los usuarios registrados: necesito iniciar sesión para poder realizar la acción / controlador.

¿Cómo puedo iniciar sesión en PHPUnit?

¿Fue útil?

Solución

Como dice que quiere probar acciones / controladores, supongo que no está escribiendo pruebas unitarias, sino pruebas funcionales / de integración, es decir, está trabajando con Zend_Test y realiza pruebas a través del MVC.

Aquí hay una función de prueba que usé en un proyecto, donde estoy probando si el inicio de sesión es correcto:

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());
}

Simplemente: estoy cargando el formulario de inicio de sesión, extrayendo el token CSRF, llenando el formulario y publicándolo.

Entonces, puedo probar si estoy conectado.


Con eso, probablemente pueda extraer la parte de inicio de sesión, para llamarla antes de cada una de sus pruebas que requieren que un usuario válido inicie sesión.

Otros consejos

Hay otra manera. En mi entidad User tengo un método login () que coloca la identificación del usuario en la sesión y una variable estática. Lo que acabo de hacer en la prueba setUp () es llamar a $ user- > login () y funciona. En el entorno de prueba, las sesiones no se utilizan (la configuración de Zend_Session :: $ isUnitTested = true tiene este efecto) y las pruebas se basan en la variable estática. Solo recuerda borrar la variable estática ( logout () el usuario) en tearDown () .

Creo que este artículo podría ayudarte: http://perevodik.net/en/posts/7/ Describe cómo crear una identidad falsa que puede usar para establecer el entorno en un estado equivalente a un usuario que haya iniciado sesión.

De la misma manera, Pascal está usando esta función:

$this->_getLoginFormCSRF();

He creado una función genérica que devuelve el valor cargando el formulario utilizando el administrador de elementos de formulario:

  

función pública _getCSRFHashValueFromForm ($ formAlias, $ csrfName) {       $ form = $ this- > servicemanager- > get ('FormElementManager') - > get ($ formAlias);       devuelve $ form- > get ($ csrfName) - > getValue (); }

Esto, por supuesto, supone que el CSRF está vinculado al formulario y no dentro de ningún fieldset, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top