2013-07-20 15 views
11

Ho dichiarato HTTP_HOST come mostrato di seguito.Errore PHPUnit "indice indefinito: HTTP_HOST"

public function testReadUser() { 

    $_SERVER['HTTP_HOST'] = "x.y"; 
    . 
    . 
    . 
} 

Nonostante ciò, phpunit fornisce un errore indice indefinito. Perché è?

+0

Puoi postare ogni errore che ottieni per favore? –

+1

"indice non definito: HTTP_HOST" questa era l'unica dichiarazione di errore. Ho usato il file bootstrap.php e ho aggiunto la riga '$ _SERVER ['HTTP_HOST'] = 'myHost';'. Questo ha risolto il problema. Non so molto sul file bootstrap.php. Puoi informarmi su che cosa è l'uso di questo file e posso passare ottenere e pubblicare parametri attraverso questo file per testare i file? – Geek

+0

Potrei dirtelo, ma cercare su google "phpunit bootstrap" ti darà un sacco di risultati rilevanti .. –

risposta

3

Ti dà quell'errore perché stai eseguendo i test tramite l'interfaccia a riga di comando (CLI). CLI non può ottenere quell'informazione perché non ci sono richieste che arrivano via HTTP.

+0

ma, è la variabile '$ _SERVER'. – srain

+0

Uso la stessa variabile nello stesso modo in un altro file di test dello stesso progetto. Io uso netbeans e non la riga di comando. – Geek

+1

Dal manuale: 'HTTP_HOST - Contenuto dell'Host: intestazione dalla richiesta corrente, se ce n'è una. Ciò significa che non c'era un simile header. È il browser che invia quell'intestazione. Configura i tuoi netbeans per inviarlo quando esegui i test. Si tratta di una informazione sul pezzo che viene letta dalla richiesta HTTP effettiva e se il client non fornisce tali informazioni, PHP non creerà l'indice menzionato nell'array $ _SERVER. – user2601913

23

Nel file phpunit.xml, è possibile impostare le variabili del server. Aggiungere l'elemento php sotto la radice phpunit:

<phpunit> 
    <php> 
     <server name='HTTP_HOST' value='http://localhost' /> 
    </php> 
</phpunit> 

Vedi the docs per ulteriori informazioni.

2

È possibile dichiarare il valore (richiesto dal metodo il test) nel metodo di prova.

Ad esempio:

function testMethod(){ 
$_SERVER['yourvar']='yourvalue'; 
...your code making the request via phpunit to the method you are testing 
} 

Dichiarando $ _SERVER nel vostro metodo di prova sarà disponibile per il metodo che si sta testando. Funziona anche per $ _POST e $ _GET se hai bisogno di quei valori per quei valori.