Cómo generar y usar registros falsos con las fábricas de modelos de Laravel

Publicado: 2023-04-28

Las pruebas son esenciales para el desarrollo web. Las fábricas de Laravel Model definen los registros de la base de datos de una manera predecible y fácilmente replicable para que las pruebas de su aplicación sean consistentes y controladas. Las fábricas de modelos definen un conjunto de atributos predeterminados para cada uno de sus modelos de Eloquent.

Por ejemplo, si está creando una aplicación de blogs que permite a los autores y moderadores aprobar los comentarios antes de que se publiquen, deberá probar si la función funciona correctamente antes de implementarla para sus usuarios. Todo esto requiere datos de prueba.

Para probar la aplicación de blogs descrita anteriormente, necesita datos de comentarios para imitar y probar la funcionalidad de su aplicación. Laravel te permite hacer eso sin recibir comentarios de usuarios reales mediante el uso de fábricas de Laravel y Faker para generar datos falsos.

Este artículo explica cómo obtener datos de comentarios sin comentarios de usuarios reales.

requisitos previos

Para completar este tutorial, debe estar familiarizado con lo siguiente:

  • XAMPP
  • Compositor

XAMPP es una distribución de Apache gratuita y fácil de instalar que contiene PHP, Perl y MariaDB, una base de datos MySQL. Este tutorial utiliza la última versión, 8.1.10, que instala PHP 8.1.10. Lea este artículo si instala XAMPP para MacOS o esta guía para Linux. Este tutorial usa XAMPP en Windows.

Composer es una herramienta que le permite definir, instalar y descargar los paquetes de los que depende su aplicación web en desarrollo y producción. Este tutorial utiliza la versión v2.4.4 de Composer, que requiere la versión 7.2+ de PHP. Utiliza Composer para instalar el instalador de Laravel para este tutorial.

También puede descargar el código completo para que el proyecto lo siga.

Probar su aplicación no debería ser una ocurrencia tardía. ¡Las fábricas de modelos de Laravel pueden ayudar! Así es como ️ Haz clic para twittear

Cómo configurar el proyecto

En esta sección, creará un proyecto de Laravel y lo conectará a una base de datos. Echemos un vistazo a todo lo que implica y cómo lograrlo.

Instalar el instalador de Laravel

Para crear un proyecto de Laravel rápidamente, instale el instalador de Laravel:

 composer global require laravel/installer

Este código instala el instalador de Laravel globalmente en su máquina.

Crear un proyecto Laravel

A continuación, cree un proyecto de Laravel ejecutando lo siguiente:

 laravel new app-name

Este código inicia un nuevo proyecto de Laravel e instala todas las dependencias:

Creando el proyecto Laravel
Creando el proyecto Laravel

Otra forma más fácil de instalar Laravel es usar Composer directamente.

 composer create-project laravel/laravel app-name

No necesita instalar el instalador de Laravel cuando usa el método anterior.

Iniciar la aplicación

Ahora puede cambiar el directorio a app-name e iniciar el proyecto utilizando la propia herramienta de interfaz de línea de comandos (CLI) de Laravel, Artisan:

 php artisan serve

Este código inicia el proyecto y lo conecta a localhost:8000 o cualquier otro puerto disponible si el puerto 8000 está en uso. En localhost:8000, debería ver algo como esto:

La página de inicio del sitio web de Laravel
Laravel

Crear una base de datos

Para conectar su aplicación a una base de datos, debe crear una nueva base de datos utilizando la interfaz gráfica de usuario PHPMyAdmin de XAMPP. Vaya a localhost/phpmyadmin y haga clic en Nuevo en la barra lateral:

El formulario Crear base de datos en PHPMyAdmin
Crear formulario de base de datos

La imagen de arriba muestra el formulario Crear base de datos con app_name como nombre de la base de datos.

Haga clic en Crear para crear una base de datos.

Edite el archivo .env

Para conectar su aplicación a una base de datos, debe editar la parte DB del archivo .env :

 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=app_name DB_USERNAME=root DB_PASSWORD=

Este código llena las credenciales de la base de datos con su nombre de base de datos, nombre de usuario, puerto, contraseña y host. Ahora está listo para comenzar a crear fábricas y modelos.

Nota: Reemplace los valores con las credenciales de su base de datos. Además, si encuentra el error "Acceso denegado para el usuario", escriba los valores de DB_USERNAME y DB_PASSWORD entre comillas dobles.

Cómo generar datos falsos

Después de crear la aplicación y conectarla a la base de datos, ahora puede crear los archivos necesarios para generar datos falsos en la base de datos.

Crear el modelo de comentario

Cree el archivo modelo para interactuar con las tablas de la base de datos. Para crear un modelo, use Artisan:

 php artisan make:model Comment

Este código crea un archivo Comment.php dentro de la carpeta app/M odels con algún código repetitivo. Agregue el siguiente código debajo del use HasFactory; línea:

 protected $fillable = [ 'name', 'email', 'body', 'approved', 'likes' ];

Este código enumera los campos que desea permitir asignaciones masivas porque Laravel protege su base de datos de asignaciones masivas de forma predeterminada. El archivo del modelo de comentario ahora debería verse así:

El archivo de modelo de comentario
Comentar el archivo del modelo

Crear el archivo de migración

Después de crear el archivo modelo y declarar la matriz $fillable , debe crear el archivo de migración con el siguiente comando:

 php artisan make:migration create_comments_table

Nota: la convención de nomenclatura para crear migraciones en Laravel suele ser snake_case , también conocida como underscore_case . La primera palabra es la acción, la segunda palabra es un plural del modelo y la última palabra es la característica que se crea dentro del proyecto. Esto significa que escribirá create_books_table cuando cree una migración para un modelo de libro.

Este código crea un archivo llamado yyyy_mm_dd_hhmmss_create_comments_table dentro de la base de datos/carpeta de migraciones .

A continuación, edite la función up dentro de yyyy_mm_dd_hhmmss_create_comments_table :

 public function up() { Schema::create('comments', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email'); $table->longText('body'); $table->boolean('approved'); $table->integer('likes')->default(0); $table->timestamps(); }); }

Este código crea un esquema que crea una tabla con las columnas: id , name , email , body , approved , likes y timestamps .

Ejecutar las Migraciones

Crear y editar el archivo de migraciones no hará nada hasta que los ejecute usando la línea de comandos. Si observa el administrador de la base de datos, todavía está vacío.

Ejecute las migraciones usando Artisan:

 php artisan migrate

Este comando ejecuta todas las migraciones dentro de la base de datos/migraciones porque es la primera migración desde que se creó la aplicación:

Migraciones exitosas
Migraciones exitosas

La siguiente imagen muestra todos los archivos de migración que ejecutó. Cada uno representa una tabla en la base de datos:

La base de datos después de las migraciones
Base de datos después de las migraciones

Crear el archivo CommentFactory

Cree un archivo de fábrica que contenga su función de definición. Para esta demostración, creará una fábrica usando Artisan:

 php artisan make:factory CommentFactory.php

Este código crea un archivo .php de CommentFactory dentro de la carpeta de base de datos/fábricas .

La función de definición

La función dentro de CommentFactory define cómo Faker genera datos falsos. Edítalo para que se vea así:

 public function definition() { return [ 'name' => $this->faker->name(), 'email' => $this->faker->email(), 'body' => $this->faker->sentence(45), 'approved' => $this->faker->boolean(), 'likes' => $this->faker->randomNumber(5) ]; }

Este código le dice a Faker que genere lo siguiente:

  • Un nombre
  • Una dirección de correo electrónico
  • Un párrafo que contiene 45 oraciones.
  • Un valor aprobado que solo puede ser verdadero o falso
  • Un número aleatorio entre 0 y 9999

Conecte el modelo de comentario a CommentFactory

Vincule el modelo Comment a CommentFactory declarando una variable $model protegida arriba de la definición:

 protected $model = Comment::class;

Además, agregue el use App\Models\Comment; a las dependencias del archivo. El archivo CommentFactory ahora debería verse así:

El archivo CommentFactory
El archivo CommentFactory

Cómo sembrar la base de datos

Sembrar en programación significa generar datos falsos aleatorios para una base de datos con fines de prueba.

Ahora que creó el modelo, ejecutó migraciones y creó la definición dentro de CommentFactory, ejecute el sembrador usando el archivo DatabaseSeeder .

Crear el archivo CommentSeeder

Cree un archivo seeder que use factory para generar los datos:

 php artisan make:seeder CommentSeeder.php

Este código crea un archivo .php de CommentSeeder dentro de la carpeta base de datos/sembradores .

Editar la función de ejecución

Conecte el modelo Comment al CommentSeeder. Agregue el siguiente código dentro de la función de ejecución:

 Comment::factory()->count(50)->create();

Este código le dice a CommentSeeder que use el modelo de comentarios y la función de definición de CommentFactory para generar 50 comentarios dentro de la base de datos. Además, agregue el use App\Models\Comment; a las dependencias del archivo. El archivo CommentSeeder ahora debería verse así:

El archivo CommentSeeder
Archivo CommentSeeder

Nota: Puede configurar Faker para crear datos locales. Por ejemplo, puede configurarlo para generar nombres italianos en lugar de nombres aleatorios configurando faker_locale dentro del archivo app/config.php en it_IT . Puede leer más sobre Faker Locales en esta guía.

Ejecutar la sembradora

A continuación, ejecute el archivo seeder con Artisan:

 php artisan db:seed --class=CommentSeeder

Este código ejecuta el archivo seeder y genera 50 filas de datos falsos en la base de datos.

Semilla de base de datos exitosa
Semilla de base de datos exitosa

La base de datos ahora debería tener 50 filas de datos falsos que puede usar para probar las funciones de su aplicación:

50 filas de datos en la base de datos
50 filas de datos en la base de datos

Cómo restablecer la base de datos

Cuando utilice los datos generados para realizar pruebas, restablezca la base de datos cada vez que ejecute una prueba. Suponga que desea probar la función de cambio de comentarios aprobados. Actualice la base de datos después de cada prueba para asegurarse de que los datos generados anteriormente no interfieran con futuras pruebas.

Usar Actualizar base de datos

Actualice la base de datos utilizando el rasgo RefreshDatabase dentro del archivo de prueba .

Vaya a ExampleTest.php dentro de la carpeta tests/Feature hasta el comentario use Illuminate\Foundation\Testing\RefreshDatabase; y agregue la siguiente línea de código sobre la función test_the_application_returns_a_successful_response :

 use RefreshDatabase;

El archivo ExampleTest.php ahora debería verse así:

El archivo EjemploPrueba
EjemploArchivo de prueba

Ejecutar la prueba

Después de agregar el rasgo RefreshDatabase al archivo de prueba, ejecute la prueba usando Artisan:

 php artisan test

Este código ejecuta todas las pruebas en la aplicación y actualiza la base de datos después de las pruebas, como se muestra en la imagen a continuación:

Una prueba artesanal exitosa
Una prueba artesanal exitosa

Ahora, revisa la base de datos para ver la tabla de comentarios vacía:

Una base de datos de comentarios vacía
Base de datos de comentarios vacía
¡La entrada manual de datos es cosa del pasado! Automatice las pruebas de su aplicación con Laravel Model Factories. ¡Empieza aquí! Haz clic para twittear

Resumen

Este artículo cubrió cómo crear un proyecto Laravel, conectarlo a una base de datos y crear y configurar modelos, migración, fábrica y archivos seeder para generar datos aleatorios para la base de datos. También discutió cómo restablecer la base de datos después de ejecutar las pruebas.

Ahora ha visto cómo Laravel Factories y Faker facilitan la generación de cualquier cantidad de datos de prueba en minutos para probar una aplicación o incluso como marcador de posición, con una configuración mínima.

Cuando su aplicación Laravel esté lista para implementarse, puede hacerlo en los servicios de alojamiento de aplicaciones de Kinsta de manera rápida y eficiente.