Las pruebas son esenciales para el desarrollo web. Laravel Model factories definen los registros de la base de datos de forma predecible y fácilmente replicable, para que las pruebas de tu aplicación sean coherentes y estén controladas. Model factories definen un conjunto de atributos predeterminados para cada uno de tus Eloquent models.

Por ejemplo, si estás creando una aplicación de blogging que permita a los autores y moderadores aprobar comentarios antes de que se publiquen, necesitarás probar si la función funciona correctamente antes de desplegarla a tus usuarios. Todo esto requiere datos de prueba.

Para probar la app de blogging descrita anteriormente, necesitas datos de comentarios para imitar y probar la funcionalidad de tu aplicación. Laravel te permite hacerlo sin obtener comentarios de usuarios reales utilizando las Laravel factories 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, debes 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. Lee este artículo si instalas XAMPP para MacOS o esta guía para Linux. Este tutorial utiliza XAMPP en Windows.

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

También puedes descargar el código completo del proyecto para seguirlo.

Cómo Configurar el Proyecto

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

Instalar el Instalador de Laravel

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

composer global require laravel/installer

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

Crea un Proyecto Laravel

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

laravel new app-name

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

Crear el proyecto Laravel
Crear el proyecto Laravel

Otra forma más sencilla de instalar Laravel es utilizar Composer directamente.

composer create-project laravel/laravel app-name

No necesitas instalar el instalador de Laravel si utilizas el método anterior.

Inicia la App

Ahora puedes 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 a cualquier otro puerto disponible si el puerto 8000 está en uso. En localhost:8000, deberías ver algo como esto:

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

Crear una Base de Datos

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

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

La imagen anterior muestra el formulario Crear Base de Datos con app_name como nombre de la base de datos.

Haz clic en Crear para crear una base de datos.

Editar el Archivo .env

Para conectar tu app a una base de datos, debes 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 rellena las credenciales de la base de datos con el nombre, nombre de usuario, puerto, contraseña y host de tu base de datos. Ya estás listo para empezar a crear factories y models.

Nota: Sustituye los valores por las credenciales de tu base de datos. Además, si te encuentras con el error «Acceso denegado para el usuario,» pon los valores de DB_USERNAME y DB_PASSWORD entre comillas dobles.

Cómo Generar Datos Falsos

Tras crear la app y conectarla a la base de datos, ahora puedes crear los archivos necesarios para generar datos falsos en la base de datos.

Crear el Comment Model

Crea el fichero model para interactuar con las tablas de la base de datos. Para crear un model, utiliza Artisan:

php artisan make:model Comment

Este código crea un archivo Comment.php dentro de la carpeta app/Models con algo de código boilerplate. Añade el siguiente código debajo de la línea use HasFactory;:

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

Este código enumera los campos que quieres permitir asignaciones masivas porque Laravel protege tu base de datos de asignaciones masivas por defecto. El archivo Comment model debería tener ahora este aspecto:

El archivo Comment model
El archivo Comment model

Crear el Archivo Migration

Después de crear el fichero model y declarar el array $fillable, debes crear el fichero migration utilizando el comando que se indica a continuación:

php artisan make:migration create_comments_table

Nota: La convención de nomenclatura para crear migraciones en Laravel suele ser snake_case también conocido 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ás create_books_table cuando crees una migración para un modelo Libro.

Este código crea un archivo llamado yyyy_mm_dd_hhmmss_create_comments_table dentro de la carpeta database/migrations.

A continuación, edita 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 migrations no hará nada hasta que los ejecutes utilizando la línea de comandos. Si miras el gestor de base de datos, sigue estando vacío.

Ejecuta las migraciones utilizando Artisan:

php artisan migrate

Este comando ejecuta todas las migraciones dentro de database/migrations porque es la primera migración desde la creación de la app:

Migraciones exitosas
Migraciones exitosas

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

La Base de Datos después de la migración
La Base de Datos después de la migración

Crear el Archivo CommentFactory

Crea un archivo factory que contenga tu función de definición. Para esta demostración, crearás un factory utilizando Artisan:

php artisan make:factory CommentFactory.php

Este código crea un archivo CommentFactory.php dentro de la carpeta database/factories.

La Función Definition

La función dentro de CommentFactory define cómo Faker genera datos falsos. Edítala para que tenga este aspecto:

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 frases
  • Un valor aprobado que sólo puede ser verdadero o falso
  • Un número aleatorio entre 0 y 9999

Conectar el Comment Model a CommentFactory

Vincula el Comment model a CommentFactory declarando una variable protegida $model encima de la definición:

protected $model = Comment::class;

Añade también use App\Models\Comment; a las dependencias del archivo. El archivo CommentFactory debería tener ahora este aspecto:

El archivo CommentFactory
El archivo CommentFactory

Cómo Sembrar la Base de Datos

En programación, sembrar (seeder) significa generar datos aleatorios falsos para una base de datos con fines de prueba.

Ahora que has creado el model, ejecutado las migraciones y creado la definición dentro de CommentFactory, ejecuta el sembrador utilizando el archivo DatabaseSeeder.

Crear el Archivo CommentSeeder

Crea un archivo seeder que utilice factory para generar los datos:

php artisan make:seeder CommentSeeder.php

Este código crea un archivo CommentSeeder.php dentro de la carpeta database/seeders.

Edita la Función Run

Conecta el Comment mode al CommentSeeder. Añade el siguiente código dentro de la función de ejecución:

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

Este código indica al CommentSeeder que utilice el Comment model y la función de definición de CommentFactory para generar 50 comentarios dentro de la base de datos. Añade también el use App\Models\Comment; a las dependencias del archivo. El archivo CommentSeeder debería tener ahora este aspecto:

Archivo CommentSeeder
Archivo CommentSeeder

Nota: Puedes configurar Faker para que cree datos locales. Por ejemplo, puedes configurarlo para que genere nombres españoles en lugar de nombres aleatorios estableciendo faker_locale dentro del archivo app/config.php en es_ES. Puedes leer más sobre Faker Locales en esta guía.

Ejecuta el Seeder

A continuación, ejecuta 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.

Base de datos sembrada con éxito
Base de datos sembrada con éxito

La base de datos debería tener ahora 50 filas de datos falsos que puedes utilizar para probar las funciones de tu 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 utilices los datos generados para realizar pruebas, restablece la base de datos cada vez que ejecutes una prueba. Supongamos que quieres probar la función de alternar comentarios aprobados. Refresca la base de datos después de cada prueba para asegurarte de que los datos generados anteriormente no interferirán en futuras pruebas.

Utiliza RefreshDatabase

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

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

use RefreshDatabase;

El archivo ExampleTest.php debería tener ahora este aspecto:

Archivo ExampleTest
Archivo ExampleTest

Ejecuta la Prueba

Después de añadir el rasgo RefreshDatabase al archivo de prueba, ejecuta la prueba con Artisan:

php artisan test

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

Una prueba Artisan realizada con éxito
Una prueba Artisan realizada con éxito

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

Base de datos de comentarios vacía
Base de datos de comentarios vacía

Resumen

En este artículo se ha explicado cómo crear un proyecto Laravel, conectarlo a una base de datos y crear y configurar los archivos models, migration, factory y seeder para generar datos aleatorios para la base de datos. También se ha explicado cómo restablecer la base de datos después de ejecutar pruebas.

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

Cuando tu aplicación Laravel esté lista para desplegarse, puedes hacerlo en los servicios de Alojamiento de Aplicaciones de Kinsta de forma rápida y eficiente.

Steve Bonisteel Kinsta

Steve Bonisteel is a Technical Editor at Kinsta who began his writing career as a print journalist, chasing ambulances and fire trucks. He has been covering Internet-related technology since the late 1990s.