¿Cómo testear datos desde una base de datos en Laravel?
Testear datos en una base de datos es crucial para asegurar que nuestras aplicaciones funcionen correctamente. En este contexto, vamos a explorar cómo realizar pruebas sobre las bases de datos utilizando Laravel. Aprenderemos cómo crear clases de prueba, cómo configurar el entorno de testing y ejecutar los test de manera efectiva.
¿Cómo iniciar una clase de test en Laravel?
Comenzamos creando una clase de prueba específica para verificar los elementos de nuestra base de datos. Podemos hacerlo utilizando el siguiente comando de Artisan:
php artisan make:test UserTest --unit
Una vez creado, encontramos la nueva clase dentro de la carpeta tests/Unit, con el patrón de nombre UserTest. Este archivo nos permite configurar las pruebas que deseamos realizar sobre el modelo en cuestión.
¿Cómo asegurarnos de que los datos existan en la base de datos?
Para verificar que cierto dato exista en la base de datos durante nuestros test, podemos usar el método assertDatabaseHas. Este método nos sirve para confirmar que un registro con campos específicos está presente en la base de datos. Veamos un ejemplo en el que comprobamos si existe un usuario con un email específico:
¿Cómo configurar el entorno de pruebas sin afectar la base de datos real?
Es imperativo no modificar nuestra base de datos real durante las pruebas. Por lo tanto, debemos configurar una base de datos para pruebas (en memoria) utilizando SQLite. Esta configuración se realiza en el archivo phpunit.xml:
Descomentamos o agregamos las líneas relativas a SQLite.
Configuramos para usar DB_CONNECTION=sqlite y DB_DATABASE=:memory: que permiten realizar pruebas sobre una base de datos temporal.
Esta configuración garantiza que cualquier cambio temporal realizado durante las pruebas no tendrá efecto en los datos reales.
¿Cómo ejecutar los test y resolver errores comunes?
Después de preparar nuestras pruebas y configurar adecuadamente el entorno, ejecutamos nuestros test usando el siguiente comando de Artisan:
php artisan test --filter=UserTest
Si encontramos errores, como que las pruebas no se ejecutan, es posible que se deba a que el entorno no estaba correctamente configurado o se olvidó guardar algunos cambios importantes en los archivos de prueba.
Al enfrentarnos con estos problemas, es útil:
Verificar que todos los archivos están guardados.
Revisar que la configuración del entorno de pruebas esté descomentada.
Comprobar que el nombre de los test cases coincida adecuadamente con la definición en nuestros archivos de pruebas.
¿Cómo simular datos para testing?
En algunas ocasiones, necesitamos crear datos ficticios para simular los escenarios de prueba. Laravel proporciona el uso de factories para generar estos datos. Puede hacerse de la siguiente forma:
Se asegura, así, que el correo electrónico test@admin.com exista para las pruebas, permitiéndonos verificar la existencia de registros específicos.
Testear adecuadamente los datos en una base de datos no solo mejora la calidad del software, sino que también garantiza que los usuarios finales experimenten un funcionamiento correcto y sin errores. ¡Continúa aprendiendo y profundizando en estos temas para convertirte en experto en Laravel!
Pruebas de Datos en Bases de Datos con PHP y Laravel
Pruebas de Datos en Bases de Datos con PHP y Laravel
Recursos
Resumen
¿Cómo testear datos desde una base de datos en Laravel?
Testear datos en una base de datos es crucial para asegurar que nuestras aplicaciones funcionen correctamente. En este contexto, vamos a explorar cómo realizar pruebas sobre las bases de datos utilizando Laravel. Aprenderemos cómo crear clases de prueba, cómo configurar el entorno de testing y ejecutar los test de manera efectiva.
¿Cómo iniciar una clase de test en Laravel?
Comenzamos creando una clase de prueba específica para verificar los elementos de nuestra base de datos. Podemos hacerlo utilizando el siguiente comando de Artisan:
php artisan make:test UserTest --unit
Una vez creado, encontramos la nueva clase dentro de la carpeta tests/Unit, con el patrón de nombre UserTest. Este archivo nos permite configurar las pruebas que deseamos realizar sobre el modelo en cuestión.
¿Cómo asegurarnos de que los datos existan en la base de datos?
Para verificar que cierto dato exista en la base de datos durante nuestros test, podemos usar el método assertDatabaseHas. Este método nos sirve para confirmar que un registro con campos específicos está presente en la base de datos. Veamos un ejemplo en el que comprobamos si existe un usuario con un email específico:
¿Cómo configurar el entorno de pruebas sin afectar la base de datos real?
Es imperativo no modificar nuestra base de datos real durante las pruebas. Por lo tanto, debemos configurar una base de datos para pruebas (en memoria) utilizando SQLite. Esta configuración se realiza en el archivo phpunit.xml:
Descomentamos o agregamos las líneas relativas a SQLite.
Configuramos para usar DB_CONNECTION=sqlite y DB_DATABASE=:memory: que permiten realizar pruebas sobre una base de datos temporal.
Esta configuración garantiza que cualquier cambio temporal realizado durante las pruebas no tendrá efecto en los datos reales.
¿Cómo ejecutar los test y resolver errores comunes?
Después de preparar nuestras pruebas y configurar adecuadamente el entorno, ejecutamos nuestros test usando el siguiente comando de Artisan:
php artisan test --filter=UserTest
Si encontramos errores, como que las pruebas no se ejecutan, es posible que se deba a que el entorno no estaba correctamente configurado o se olvidó guardar algunos cambios importantes en los archivos de prueba.
Al enfrentarnos con estos problemas, es útil:
Verificar que todos los archivos están guardados.
Revisar que la configuración del entorno de pruebas esté descomentada.
Comprobar que el nombre de los test cases coincida adecuadamente con la definición en nuestros archivos de pruebas.
¿Cómo simular datos para testing?
En algunas ocasiones, necesitamos crear datos ficticios para simular los escenarios de prueba. Laravel proporciona el uso de factories para generar estos datos. Puede hacerse de la siguiente forma:
Se asegura, así, que el correo electrónico test@admin.com exista para las pruebas, permitiéndonos verificar la existencia de registros específicos.
Testear adecuadamente los datos en una base de datos no solo mejora la calidad del software, sino que también garantiza que los usuarios finales experimenten un funcionamiento correcto y sin errores. ¡Continúa aprendiendo y profundizando en estos temas para convertirte en experto en Laravel!
Vale, por si a alguien le sale el error could not find driver (SQL: PRAGMA foreign_keys = ON;)
.
Lo que tienen que hacer es dos cosas:
.
Ir a su archivo php.ini (en Linux está ubicado en /etc/php/php8.0/apache2/php.ini en mi caso tengo la versión 8.0, revisa cuál es la tuya) y aquí buscar la línea ;extension=pdo_sqlite, simplemente le quitan ese ";" del inicio y guardan el archivo
En caso de que aún no puedan, lo más probable es que no tengan la extensión instalada, para este caso (en Linux), puede usar el comando sudo apt install php8.0-sqlite3, con eso se instala el driver que conecta a PHP con sqlite, en mi caso estoy usando PHP 8.0, por cada versión de PHP existirá un driver
.
En teoría eso debería solucionar el problema 🤔 He visto por ahí que algunos tienen que crear un archivo llamado database.sqlite dentro del directorio database, aunque en mi caso no fue necesaro :D
Hola, quería comentarles que considero que esta clase debería haber estado antes al inicio del curso o en los otros cursos de Laravel. El testing es muy poderoso, sobre todo con comandos como "RefreshDatabase", porque al correrlo sin estar en un ambiente de pruebas, la base de datos se migra por completo de nuevo, pudiendo perder así una buena cantidad de información.
Buenas, tengo una duda la cual no pude solucionarla, a los test los configure para que se ejecuten con sqlite, el tema es que cuando ejecuto me tirar error:
Por si alguien implementa los Tests Funcionales con browser para simular la interacción de un usuario con la plataforma (Laravel Dusk).
He estado viendo en la documentación que se recomienda el uso del trait DatabaseTruncation para agilizar las tareas de creación de datos en las tablas y borrado por cada Test que se lanza
use Illuminate\Foundation\Testing\DatabaseTruncation;
y que se desaconseja el uso de SQLite en memoria
SQLite in-memory databases may not be used when executing Dusk tests. Since the browser executes within its own process, it will not be able to access the in-memory databases of other processes.