Ver índice de contenidos del libro

10.6. Configurando los tests

El cliente utilizado en los tests funcionales crea un kernel o núcleo que se ejecuta en un entorno especial llamado test. Como Symfony carga el archivo de configuración app/config/config_test.yml en el entorno test, puedes modificar cualquier opción de configuración para los tests.

El componente swiftmailer por ejemplo está configurado por defecto para que en el entorno test no se envíen realmente los emails. Puedes ver esta configuración bajo la clave swiftmailer:

# app/config/config_test.yml
 
# ...
swiftmailer:
    disable_delivery: true
<!-- app/config/config_test.xml -->
<container>
    <!-- ... -->
    <swiftmailer:config disable-delivery="true" />
</container>
// app/config/config_test.php
 
// ...
$container->loadFromExtension('swiftmailer', array(
    'disable_delivery' => true,
));

Si lo prefieres, puedes usar un entorno completamente diferente, o modificar el valor de la opción debug (que por defecto es true) pasando cada opción al método createClient():

$client = static::createClient(array(
    'environment' => 'my_test_env',
    'debug'       => false,
));

Si tu aplicación requiere unas determinadas cabeceras HTTP, también puedes pasarlas como segundo argumento de createClient():

$client = static::createClient(array(), array(
    'HTTP_HOST'       => 'en.example.com',
    'HTTP_USER_AGENT' => 'MySuperBrowser/1.0',
));

También puedes reemplazar las cabeceras HTTP de cada petición:

$client->request('GET', '/', array(), array(), array(
    'HTTP_HOST'       => 'en.example.com',
    'HTTP_USER_AGENT' => 'MySuperBrowser/1.0',
));

Truco El cliente para tests está disponible como un servicio en el contenedor solamente en el entorno test (o cuando está habilitada la opción framework.test). Esto significa que, si lo necesitas, puedes redefinir el servicio completamente.

10.6.1.  Configuración de PHPUnit

Cada aplicación tiene su propia configuración de PHPUnit, almacenada en el archivo app/phpunit.xml.dist. Puedes editar este archivo para cambiar los valores predeterminados o crear un nuevo archivo llamado app/phpunit.xml para modificar la configuración solamente en tu servidor local.

Truco Guarda el archivo phpunit.xml.dist en tu repositorio de código, e ignora el archivo phpunit.xml local.

De forma predeterminada, el comando phpunit sólo ejecuta los tests almacenados en los bundles estándar (es decir, aquellos que se encuentran en los directorios src/*/*Bundle/Tests o src/*/Bundle/*Bundle/Tests), tal y como se configura en el archivo app/phpunit.xml.dist:

<!-- app/phpunit.xml.dist -->
<phpunit>
    <!-- ... -->
    <testsuites>
        <testsuite name="Project Test Suite">
            <directory>../src/*/*Bundle/Tests</directory>
            <directory>../src/*/Bundle/*Bundle/Tests</directory>
        </testsuite>
    </testsuites>
    <!-- ... -->
</phpunit>

Si lo necesitas, puedes añadir fácilmente más directorios de tests. Por ejemplo, la siguiente configuración añade los tests de un directorio propio llamado lib/tests:

<!-- app/phpunit.xml.dist -->
    <phpunit>
        <!-- ... -->
        <testsuites>
            <testsuite name="Project Test Suite">
                <!-- ... --->
                <directory>../lib/tests</directory>
            </testsuite>
        </testsuites>
        <!-- ... --->
    </phpunit>

Para incluir otros directorios en el informe de la cobertura de código, edita también la sección <filter>:

<!-- app/phpunit.xml.dist -->
<phpunit>
    <!-- ... -->
    <filter>
        <whitelist>
            <!-- ... -->
            <directory>../lib</directory>
            <exclude>
                <!-- ... -->
                <directory>../lib/tests</directory>
            </exclude>
        </whitelist>
    </filter>
    <!-- ... --->
</phpunit>