domingo, 29 de abril de 2012

Unit Tests en PHP con errores relacionados a la funcion header o similares

Muchas veces cuando se prueban ciertas partes del codigo en php con PHPUnit o con Simple Tests hay errores que se disparan por que el codigo solo puede ser ejecutado cuando esta en un ambiente web y no en consola como usualmente se ejecutan los unit tests. Una funcion que me genero problemas una vez fue header( ... ). Como ustedes saben header es una funcion para cambiar encabezados http de la respuesta que va a generar el script php hacia el cliente. El siguiente codigo se encarga de probar un metodo de un objeto que utiliza la funcion header

public function testRedirectMethod() {
    $this->http->redirect('http://google.com');
}

La funcion redirect simplemente cambia el encabezado location utilizando el metodo header de la siguiente forma. Este codigo en el momento de correr las pruebas va a generar un error, por lo tanto los unit tests no seran exitosos, por que es un metodo que se utiliza normalmente en ambiente web para redireccionar a otra pagina

public function redirect($location) {
    header('Location: ' . $location);
}

Por lo tanto un fix para este problema seria rodear la llamada con los metodos de php para esconder los errores y q el error en esa linea no se dispare:

public function redirect($location) {
    error_reporting(0);
    header('Location: ' . $location);
    error_reporting(E_ALL);
}

Saludos,

Compartir