2011-07-01 16 views
6

Cuando un usuario accede/usa/valida sin los parámetros de publicación correctos, mi aplicación Zend arroja una excepción de zend. (Aparece el mensaje estándar "Se produjo un error", enmarcado dentro de mi diseño). Esto es intencional.Excepciones de prueba de problemas con PHPUnit y Zend Framework

Ahora estoy tratando de probar ese comportamiento con PHPUnit. Aquí está mi prueba:

/** 
* @expectedException Zend_Exception 
*/ 
public function testEmptyUserValidationParametersCauseException() { 
    $this->dispatch('/user/validate'); 
} 

Cuando ejecuto la prueba me sale un mensaje que dice que no, "Zend_Exception excepción esperada". ¿Algunas ideas?

tengo otras pruebas en el archivo que están trabajando muy bien ...

Gracias!

Respuesta

5

El complemento Zend_Controller_Plugin_ErrorHandler maneja las excepciones por usted y el controlador de errores predeterminado fuerza un redireccionamiento 500 que puede significar que la excepción que está probando ya no existe. Pruebe lo siguiente prueba de la unidad y ver si se aprueba:

public function testUnknownUserRedirectsToErrorPage() 
{ 
    $this->dispatch('/user/validate'); 
    $this->assertController('error'); 
    $this->assertAction('error'); 
    $this->assertResponseCode('500'); 
} 

Si esto funciona entonces se muestra que por el momento se renderiza, el error de ver la excepción ya no existirá, ya que está contenida en el código antes de la redirección .

+0

Gracias tomjowitt! ¡Lo tienes en uno! –

+0

¿Hay alguna manera de recuperar la excepción no detectada de forma similar a 'sfBrowser-> getCurrentException()' de Symfony? Probablemente sería útil también verificar que se lanzó la excepción correcta. –

2

Bueno, ¿tal vez simplemente falla porque no se arroja ninguna excepción?

¿Intentó ejecutar la prueba sin "@expectedException Zend_Exception"? ¿Hay alguna excepción?

+0

+1 para obtener sugerencias sobre cómo diagnosticar excepciones faltantes pero esperadas. Lo más probable es que veas la prueba pasar después de eliminar la anotación. La otra respuesta sobre el controlador de error es probablemente correcta. –

Cuestiones relacionadas