2011-11-07 4 views
7

Estoy probando un controlador de esa manera:Symfony 2 w/PHPUnit 3.6: el cambio de nombre de host de destino para fines de prueba

$crawler = $client->request('GET', 'lang/120'); 

Al print_r'ing el objeto $ rastreador puedo ver que la URL de destino es http://localhost/lang/120. Sin embargo, mi host de destino es un host virtual configurado en mi máquina, digamos http://www.somehost.tld y me gustaría usarlo. ¿Qué medios limpios debo usar para que mis pruebas unitarias se dirijan a ese host virtual?

he intentado poner una variable php en mi archivo phpunit.xml.dist y utilizarla:

<php> 
    <server name="HOSTNAME" value="http://www.somehost.tld/app.php/" /> 
</php> 

Y luego:

$crawler = $client->request('GET', $_SERVER['HOSTNAME'] . 'lang/120'); 

Pero eso no augura nada bueno ... ¿Hay alguna config file (el archivo config_test?) donde debería poner ese nombre de host virtual?

¡Gracias por ayudar a todos!

Respuesta

6

Puede establecer esos valores como parámetros DIC (Dependency Injection Container) en config/config_test.yml.

Básicamente hay que añadirlas así:

parameters: 
    myapp.test.hostname.somehost: http://www.somehost.tld 
    myapp.test.hostname.otherhost: https://www.otherhost.tld 

continuación, puede crear un método de ayuda en su clase de prueba para obtener la URL de un host determinado:

private function getHostUrl($hostId, $path = '') 
{ 
    return self::$kernel->getContainer()->getParameter('myapp.test.hostname.'.$hostId).$path; 
} 

Nota: Voy a Supongamos que está utilizando el WebTestCase.

Por último, hacer uso de esto en su ensayo:

$crawler = $client->request('GET', $this->getHostUrl('somehost', '/lang/120')); 
+0

Eso suena bien, Igor, gracias! Sin embargo, esto desencadenaría una propiedad estática de acceso \ .. \ .. \ LanguageControllerTest :: $ kernel no estática ... que se resuelve mediante el uso de "self :: $ kernel -> ..." – user772843

+0

Mi mal, parece esto fue cambiado en algún momento. De hecho, ahora debe ser self :: $ kernel. Reparar mi respuesta – igorw

12

También puede pasar HTTP_HOST en los parámetros del servidor para cambiar el nombre de host de destino:

self::createClient(array(), array(
    'HTTP_HOST' => 'sample.host.com', 
)); 
2

Según igorw, si usted tiene su nombre de host como parámetro en un archivo de configuración, como:

#config/config_test.yml 
parameters: 
    myapp_hostname: "http://www.myapp.com" 

en su WebTestCase, puede obtener el nombre de host de parámetros, y establecer el parámetro HTTP_HOST al cliente:

$client = self::createClient(); 
$hostname = $client->getContainer()->getParameter('myapp_hostname'); 
$client->setServerParameter('HTTP_HOST', $hostname); 
$client->request('GET', '/lang/120'); 

En su código para poner a prueba, el objeto Request contiene el nombre de host:

'http://www.myapp.com/lang/120' === $request->getUri(); 
Cuestiones relacionadas