2011-10-04 24 views
5

Ejecuto mis pruebas de unidad a través de la línea de comandos y funciona bien.¿CÓMO unitar las variables de sesión de sesión en PHP?

Pero el problema aquí es cuando pruebo una función que contiene código que lee una variable de sesión, me sale un nulo valor ..

Mi conjetura es que no se puede acceder a las variables de sesión cuando usted no está en un navegador.

¿Cómo puedo hacer esto con PHP? ¿Esto es posible?

Por cierto estoy usando CodeIgniter 1.7.2 y v0.17 CIUnit

Cualquier sugerencia o comentario sería una gran ayuda para mí ..

Gracias

+0

Abrí el acceso a los datos de sesión en una clase dedicada y me burlé de eso en las pruebas. – Phil

+0

Las sesiones de CI son de hecho cookies, así que sí, funcionan en los navegadores –

+0

Gracias Phil y Damien por la respuesta .. @Phil ¿Cómo lo haría? Lo siento, soy totalmente novato en esto ... ¿Puedo pedir un ejemplo o procedimientos si está bien con usted ... thx –

Respuesta

8

utilizo una clase para el sesión como Phil sugirió. Si llama a session_start() manualmente, está vinculando su código a la implementación de la sesión PHP. Mi llamada a session_start está protegido por mi clase de sesión con la siguiente:

if (!isset($_SESSION)) 
    { 
    // If we are run from the command line interface then we do not care 
    // about headers sent using the session_start. 
    if (PHP_SAPI === 'cli') 
    { 
     $_SESSION = array(); 
    } 
    elseif (!headers_sent()) 
    { 
     if (!session_start()) 
     { 
      throw new Exception(__METHOD__ . 'session_start failed.'); 
     } 
    } 
    else 
    { 
     throw new Exception(
      __METHOD__ . 'Session started after headers sent.'); 
    } 
    } 

Editar:

El código anterior entrar en su clase de sesión (y probablemente ser llamado de alguna manera por su constructor). La línea de comando PHP crea una matriz en lugar de llamar a session_start (que no funciona en la línea de comandos).

Al probar el código que se basa en variables de sesión que se burlan de las variables de sesión en mi prueba:

$_SESSION = array('key1' => 'value you want', 'key2' => 'etc.'); 

Esto le permite probar todos los posibles valores de la sesión que recibirá en la página.

La prueba de que los valores de la sesión se crean pertenece con el código que los crea en mi opinión, por lo que burlarse de su existencia me parece bien. De esta forma, está probando cada unidad por separado en lugar de combinarlas y mantener los valores de sesión entre las pruebas.

+0

Gracias Paul por la respuesta. ¿Esto significa que haré mi propia clase de sesión? ¿Cómo puedo acceder a las variables de sesión que ya existen? porque obtengo valores nulos cuando estoy en línea de comandos, pero obtengo un valor correcto cuando estoy en un navegador. mi prueba unitaria se ejecuta a través de la línea de comando. –

+0

Completaré mi respuesta con esos detalles. – Paul

+0

mucho ... –

Cuestiones relacionadas