Configurar Laravel para ejecutar testing automatico. Pruebas unitarias, pruebas de integración
Es bien sabido que para un correcto desarrollo de una aplicacion se deben tener la mayor cantidad, por no decir el 100%, de los metodos y funciones de la aplicacion testeadas.
En este post vamos a ver como configurar una aplicacion Laravel para poder usar los testings que tiene por defecto.
Para esto es necesario configurar una base de datos que este guardando la informacion en memoria, y no en alguna base de datos permanente. La idea es no persistir(guardar) la informacion que vamos a generar con los tests.
Para esto primero debemos crear una aplicacion Laravel. En esto no voy a invcertir tiempo explicandolo. Revisa la documentacion. Es muy sencillo.
Listo, con nuestra aplicacion Laravel creada, vamos a configurarla.
Importante: para el momento de escribir este post, Laravel se encuentra en us version 9, por lo que estaremos trabajando con dicha version.
Bien. Ahora si. Al grano.
Vamos al directorio config, al archivo database.php, y dentro del arreglo ‘conections’ vamos a crear un nuevo campo llamado sqlite_test. Quedaria asi:
'connections' => [
'sqlite' => [...],
'sqlite_testing' => [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => ''
],
'mysql' => [...],
]
Usaremos el driver de sqlite, ya que es una base de datos ligera y muy util para trabajar con informacion temporal de poca informacion.
Ademas el campo database, le asignaremos el valor :memory: , esto indica a Laravel que la informacion sera guardada en memoria. Osea temporalmente.
Listo. Ahora para indicarle a Laravel que debe usar esta base de datos para los tests, debemos ir al archivo de configuracion de PHPUnit.
Este archivo se encuentra en la raiz del proyecto. El archivo se llama phpunit.xml
En este archivo agregaremos las siguientes dos lineas(puede ser solo una):
<php>
<env name="DB_CONNECTION" value="sqlite_testing"/>
<env name="DB_DATABASE" value=":memory:"/>
<php>
Dentro de la etiqueta <php> colocamos estas dos etiquetas. Seguramente habran mas etiquetas. No eliminar las que se encuentran, solo añadir estas dos nuevas. Generalmente estas etiquetas se encuentran comentadas.
La primera etiqueta indicara cual base de datos debe usar Laravel para los tests. En nuestro caso le llamamos sqlite_testing.
La otra etiqueta indica que los registros de esta base de datos se guardaran en memoria. Esta etiqueta no es necesaria en caso de que lo hayamos indicado en el archivo de configuracion de base de datos (config/database.php). Pero pues, no esta de mas.
Y LISTO!
Ya tenemos configurada nuestra aplicacion Laravel para ejecutar tests de todo tipo.
Saludos!