Cómo cambiar un valor del .env de Laravel en un test de PHPUnit

Seguro que ya sabes que a través del fichero phpunit.xml puedes modificar los valores del fichero .env. Por ejemplo puedes hacer que se use una base de datos en memoria para acelerar los test o cambiar el entorno a «testing»:

<php>
    <server name="APP_ENV" value="testing"/>
    <server name="DB_CONNECTION" value="sqlite"/>
    <server name="DB_DATABASE" value=":memory:"/>
</php>

Pero a veces nos interesa cambiar un valor para un único test. Si ese es el caso puedes usar la función config(). Por ejemplo, si necesitas cambiar el timezone en un determinado test puedes hacer:

config(['app.timezone' => 'Europe/Madrid ]);

Si a esta función le pasamos un array lo que hará es modificar los valores que ya tenía definidos en los ficheros de configuración.

Claro que esto solo funciona si no cometes el error de acceder a los valores de .env directamente desde tu código usando la función env():

$timezone = env('DB_DATABASE'); // no uses funciones env() fuera de los fichero de configuración.

Recuerda que no es buena idea usar las funciones env() en tu código. Esta función es solo para el fichero de configuración.

Me siento solo, dime algo...