estoy recibiendo numerosos errores exactamente como éste:salida PHPUnit que causan excepciones Zend_Session
Zend_Session_Exception: Session must be started before any output has been sent to the browser; output started in /usr/local/zend/share/pear/PHPUnit/Util/Printer.php/173
Cuando se ejecuta conjunto de pruebas de mi solicitud. Esto es con PHPUnit 3.5.10 y PHP 5.3.5.
No hay salida de espacio en blanco misteriosa e inesperada que esté causando esto. He determinado que la "salida que se envía al navegador" es el resultado real de las pruebas PHPUnit que se están ejecutando. Si abro PHPUnit/Util/Printer.php y envuelvo la línea print $buffer
con if (strpos($buffer, 'PHPUnit 3.5.10 by Sebastian Bergmann') === false)
(deteniendo efectivamente la primera línea de salida de PHPUnit), entonces mi primera prueba tiene éxito (hasta que el caso de prueba muestra un punto que indica que la prueba tuvo éxito, entonces la siguiente prueba falla porque salió el punto).
Otro desarrollador de mi equipo puede ejecutar el conjunto de pruebas completo con éxito, así que sé que no hay ningún problema con el código de la aplicación. Debe ser algún ajuste de configuración o problema con mi entorno local.
Ya he comprobado php.ini para verificar que output_buffering
está encendido y implicit_flush
está desactivado, y lo son.
También intenté agregar Zend_Session::$_unitTestEnabled = true;
a mi bootstrap de prueba, pero eso no ayudó (y no debería ser necesario porque funciona en la máquina de otro desarrollador y en nuestro servidor de CI sin él).
¿Alguna sugerencia además de ignorar los errores? Nunca había visto algo como esto y estoy realmente perdido.
Gracias!
ACTUALIZACIÓN:
Para intentar aislar aún más el problema, me tomó ZF y mi solicitud fuera de la ecuación ejecutando el siguiente script de prueba:
<?php
class SessionTest extends PHPUnit_Framework_TestCase
{
public function testSession()
{
session_start();
$this->assertTrue(true);
}
}
la prueba falla:
1) SessionTest::testSession
session_start(): Cannot send session cookie - headers already sent by (output started at /home/mmsa/test.php:1)
Sin embargo, la misma prueba funciona en la máquina de un amigo. La misma versión de PHP y PHPUnit.
Haga caso omiso de mi comentario anterior; esto en realidad ** funcionó **. Todavía tenía un código de depuración en el núcleo de PHPUnit mientras intentaba resolver esto anoche. Cuando lo revertí, el indicador '--stderr' permitió que las pruebas funcionaran. ¡Gracias! Esta es una solución, sin embargo. Si funciona en otra máquina sin la bandera '--stderr', entonces debería funcionar en la mía. Por lo que puedo decir, no tengo el búfer de salida desactivado. ¿Qué más puedo verificar? –
Es posible que sea '--stderr' en las últimas versiones (que sin duda sería más estándar), pero mi (un poco fuera de fecha) de instalar PHPUnit sólo es compatible con' -stderr'. Usamos '-stderr' cuando ejecutamos todas nuestras pruebas, debido a este problema de sesión. En cuanto a lo que podría diferir entre sus entornos, solo puedo recomendar comparar la salida de 'php -i' en ambas máquinas para encontrar las diferencias de configuración. –
Esto también funciona para mí. Lamentablemente, no parece haber una opción (todavía) para poner 'phpunit.xml' para esto. – dave1010