- Published on
Testing en Laravel, configuración de la base de datos
- Authors
-
-
- Name
- Iván Portillo
- @portillo_dev
-
Configuración de la BBDD para ejecutar los tests en Laravel de una forma optima y rápida.
Configuración de la BBDD para ejecutar los tests en Laravel
Para poder hacer uso de la base de datos al ejecutar nuestros tests en Laravel, y que no afecte a la integridad de nuestros datos existentes. Se puede configurar de una forma óptima y muy sencilla, configurando un par de líneas.
Configuraciones
Archivo phpunit.xml
El archivo phpunit.xml, se encuentra en la raíz del proyecto. En este fichero veremos que existen unas etiquetas "php", y dentro otras etiquetas "env" o “server” , dependiendo de la versión de Laravel con la que estés trabajando. Estas etiquetas sirven para añadir las variables de entorno que podemos necesitar en la ejecución de nuestros tests, y no hacer uso de las variables reales que se encuentran en nuestro archivo .env.
En esta sección, debería haber dos líneas comentadas que hace referencia al nombre de la conexión a nuestra base de datos y al nombre de la base de datos.
Aquí lo único que habría que hacer es descomentar esas dos líneas
La primera variable, “DB_CONNECTION”, nos dice que vamos a usar una conexión a una base de datos de tipo Sqlite. El siguiente valor que descomentamos, “DB_DATABASE”, le decimos que las migraciones se ejecuten en memoria.
Clase TestCase
El fichero TestCase, se encuentra en la carpeta /tests. La clase TestCase, es usada como clase padre del resto de clases de tipo test que creemos. Por lo tanto, cualquier configuración o modificación que realicemos aquí, será heredada por sus clases hijas. No obstante, esta misma configuración se puede hacer sobre cualquier clase de test que creemos. Para que no afecten a todos los tests
Primero lo que debemos hacer es importar nuestro trait RefreshDabase en nuestra clase con la directiva use
use Illuminate\Foundation\Testing\RefreshDatabase;
Y la añadimos a nuestra clase TestCase
use RefreshDatabase;
RefreshDatabase
Este trait, lo que hace básicamente es ejecutar todas las migraciones antes de iniciar el método, y un rollback de la base de datos dejándola como estaba antes, al finalizar el método.
RefreshDatabase es muy útil, porque cualquier actualización que realicemos en la base de datos mediante las migraciones se ejecutará y siempre tendremos la base de datos limpia para el siguiente método, sin que ningún método anterior pueda ensuciar el resto de tests.
Resumen
La finalidad de esta configuración, ¿Cual es?. Poder ejecutar cada test de forma aislada del resto, pero de una forma rápida, porque las migraciones se ejecutan por cada método, pero se ejecutarán en memoria, lo que hará el proceso muy rápido.
De la otra forma, si usáramos una conexión a una base de datos externa, realizaría las dos transacciones por cada método (Ejecutar la migraciones antes del método y rollback al finalizar), convirtiendo nuestros tests más lentos a nivel de velocidad
Por último, si tienes alguna duda o sugerencia. Puedes contactarme a través del formulario de contacto o por medio de mis perfiles en redes sociales.
Espero que este articulo te haya sido de utilidad y no dudes en compartirlo si crees que puede ser de utilidad para otras personas.
feliz código a tod@s!!