2011-10-04 14 views
5

Eseguo i miei test di unità tramite la riga di comando e funziona correttamente.COME eseguire il test delle variabili di sessione in PHP?

Ma il problema qui è quando i test di una funzione che contiene il codice che leggere una variabile di sessione, ottengo un valore nullo ..

La mia ipotesi è che non si può accedere alle variabili di sessione quando non si è in un browser.

Come posso farlo con PHP? È possibile?

A proposito Im utilizzando CodeIgniter 1.7.2 e CIUnit v0.17

qualsiasi suggerimento o commento sarebbe di grande aiuto per me ..

Grazie

+0

Accumulo l'accesso ai dati di sessione in una classe dedicata e simulato nei test. – Phil

+0

Le sessioni CI sono infatti dei cookie, quindi sì, funzionano nei browser –

+0

Grazie Phil e Damien per la risposta .. @Phil Come potrei farlo? Quindi scusami im totalmente noob su questo .. Posso chiedere un esempio o le procedure se va bene con te .. thx –

risposta

8

Io uso una classe per la sessione come suggeriva Phil. Se si chiama session_start() manualmente si associa il codice all'implementazione della sessione PHP. La mia chiamata a session_start è protetto dalla mia classe sessione con il seguente:

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.'); 
    } 
    } 

Edit:

Il codice qui sopra entra nella tua classe di sessione (e, probabilmente, essere chiamato in qualche modo dal suo costruttore). La riga di comando PHP crea una matrice invece di chiamare session_start (che non funziona sulla riga di comando).

Durante il test il codice che si basa su variabili di sessione ho deridere le variabili di sessione nel mio test:

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

Questo vi permette di testare tutte le possibili impostazioni della sessione che riceverete sulla pagina.

Verificare che i valori di sessione siano creati appartiene al codice che li crea a mio parere, quindi mi sembra che prendermi in giro sia la loro esistenza. In questo modo stai testando ciascuna unità separatamente piuttosto che combinandoli e mantenendo i valori della sessione tra i test.

+0

Grazie Paul per la risposta. Questo significa che farò la mia sessione di lezioni? Come posso accedere alle variabili di sessione che esistono già? perché Im ottenere valori null quando in riga di comando, ma ottenere un valore corretto quando in un browser. il mio test di unità viene eseguito tramite la riga di comando. –

+0

Compilerò la mia risposta con questi dettagli. – Paul

+0

grazie mille ... –

Problemi correlati