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](https://kinsta.com/wp-content/uploads/2023/03/creating-laravel-project.png)
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](https://kinsta.com/wp-content/uploads/2023/03/laravel-website-homepage.png)
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](https://kinsta.com/wp-content/uploads/2023/03/create-database-form.png)
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](https://kinsta.com/wp-content/uploads/2023/03/carbon.png)
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](https://kinsta.com/wp-content/uploads/2023/03/successful-migrations.png)
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](https://kinsta.com/wp-content/uploads/2023/03/database-after-migrations.png)
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](https://kinsta.com/wp-content/uploads/2023/03/comment-factory-file.png)
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](https://kinsta.com/wp-content/uploads/2023/03/comment-seeder-file.png)
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](https://kinsta.com/wp-content/uploads/2023/03/database-seed-successful.png)
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](https://kinsta.com/wp-content/uploads/2023/03/database-rows.png)
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](https://kinsta.com/wp-content/uploads/2023/03/example-test-file.png)
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](https://kinsta.com/wp-content/uploads/2023/03/successful-test.png)
Ahora, comprueba la base de datos para ver la tabla de comentarios vacía:
![Base de datos de comentarios vacía](https://kinsta.com/wp-content/uploads/2023/03/empty-comments-database.png)
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.
Deja una respuesta