Creación de datos falsos para pruebas con factories y seeders

Clase 4 de 25Curso de Laravel

Resumen

Para desarrollar y probar aplicaciones web con Laravel, es esencial contar con datos que simulen situaciones reales. Una base de datos vacía limita la capacidad de verificar cómo interactúa el usuario con nuestra aplicación. Por esta razón, Laravel proporciona herramientas efectivas como factories y seeders que facilitan la creación de información falsa parecida al entorno laboral. Aprende a implementar estas características para generar registros realistas y verificar fácilmente el comportamiento de tu aplicación.

¿Qué son los factories y cómo funcionan?

Los factories en Laravel sirven para generar datos falsos automatizados. Al trabajar desde la carpeta dedicada a las bases de datos, se usan estos factories para llenar tablas como usuarios, categorías, preguntas y respuestas. Cada factory define cómo se crearán dichos datos falsos:

  • Usuarios: Pueden crearse nombres aleatorios, correos electrónicos específicos para pruebas, y contraseñas encriptadas.
  • Categorías: Se generan nombres aleatorios de categorías y colores en formato hexadecimal.
  • Preguntas y respuestas: Se añaden títulos y descripciones que simulan contenido creado por diferentes usuarios.

Ejemplo básico de un factory de usuarios:

User::factory(19)->create();
User::factory()->create([
    'email' => 'ejemplo@test.com',
]);

¿Cómo usar seeders para llenar la base de datos?

Los seeders ejecutan los factories en secuencia para poblar sistemáticamente una base de datos. Con el comando adecuado en terminal, se realiza un proceso de migración, refresco y llenado de tablas en sencilla sucesión. Por ejemplo:

php artisan migrate:refresh --seed

Esto ejecuta automáticamente:

  1. Un rollback eliminando antiguas migraciones.
  2. Ejecución de nuevas migraciones.
  3. Poblado rápido y eficiente con información simulada por los seeders.

¿Qué son las consultas diferidas y por qué se necesitan?

La consulta diferida o funciones anónimas permiten generar múltiples consultas individuales en lugar de reutilizar la misma consulta. Esto resulta importante cuando se requiere:

  • Variedad de usuarios que realizan preguntas y respuestas.
  • Diversidad en la asignación de categorías a preguntas o elementos relacionados.

Ejemplo de consulta diferida:

'category_id' => function() {
    return Category::all()->random()->id;
},
'user_id' => function() {
    return User::all()->random()->id;
},

Esto asegura que cada registro creado tenga asignaciones únicas y variables, logrando mayor similitud con situaciones reales.

¿Cómo manejar una relación polimorfa en tus factories?

Para relaciones flexibles como comentarios pertenecientes tanto a preguntas como respuestas, utilizamos relaciones polimorfas:

comment::factory(100)->create([
    'commentable_id' => Answer::all()->random()->id,
    'commentable_type' => Answer::class,
]);

comment::factory(100)->create([
    'commentable_id' => Question::all()->random()->id,
    'commentable_type' => Question::class,
]);

Esto genera comentarios variados relacionados a diferentes elementos, logrando simular interacciones auténticas y variadas.

¿Cómo verificar el resultado final en la base de datos?

Tras la ejecución correcta, la base de datos debe reflejar:

  • Registro múltiple de usuarios con datos realistas.
  • Asignaciones variadas de categorías, preguntas y respuestas.
  • Comentarios asociados diversamente.

La comprobación en detalle es esencial y confirma que los datos generados cumplen el objetivo de que tu aplicación esté lista para auténticas pruebas de usuario.

Ahora te invitamos a implementar esta práctica en tus proyectos para que puedas comprobar cómo tu aplicación reacciona ante situaciones reales y variadas. Si tienes dudas o deseas compartir tu experiencia, no olvides comentar.