laravel-test-model-factory-helper

Crear datos de prueba para comprobar el funcionamiento de tu aplicación es cada vez más sencillo con Laravel. El framework ahora cuenta con una capa o feature llamada Model factory que permite crear y almacenar información aleatoria para su posterior uso. Todo esto es posible con la ayuda del componente Faker, que ahora también viene incluido en Laravel, por defecto. Pero, ¿Y si damos un paso más? Hoy quiero explicarte cómo es posible generar model factories automáticamente con el complemento mpociot/laravel-test-factory-helper y así ahorrar aún más tiempo.

Este paquete lo que hace es generar los Model Factories usando como guía los modelos y la estructura de la base de datos de tu aplicación. Para su instalación solo debemos dirigimos en la consola (ubicados en la carpeta de nuestro proyecto) y ejecutar el siguiente comando:

composer require mpociot/laravel-test-factory-helper

Cuando se termine de descargar, agregamos el  service provider en array de providers que podemos encontrar en el archivo config/app.php:

Mpociot\LaravelTestFactoryHelper\TestFactoryHelperServiceProvider::class

Listo, ya está instalado y configurado el complemento. Ahora a modo de ejemplo vamos a crear un módulo de notas, utilizar el complemento para generar los model factories y utilizarlo en un seeder para crear 10 registros.

Para comenzar el ejemplo, vamos a crear una migración el cual llamaremos create_note_tableSeeder, con el comando:

php artisan make:migration create_notes_table

vamos a modificar el archivo que fue creado en database/migrations/create_notes_table.php, el cual quedaría así:

    public function up()
    {
        Schema::create('tags', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->text('description');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('tags');
    }

Ahora creamos el modelo Note, con el comando:

php artisan make:model Note

el cual quedaría de la siguiente forma:

class Note extends Model
{
    protected $table = 'notes';

    protected $fillable = ['title, description'];
}

Nota: para continuar, recuerda tener los datos correctos para la conexión a la base de datos en el archivo de configuración .env de tu aplicación.

Perfecto, ya tenemos la migración y el modelo listo, vamos a ejecutar  la migración, con el siguiente comando en la consola:

php artisan migrate

Ahora si, genial podemos generar los model factories, con el siguiente comando en consola:

php artisan test-factory-helper:generate

Si revisamos el archivo database/factories/ModelFactory.php podremos ver que se han generado las siguientes líneas:

$factory->define(App\Note::class, function (Faker\Generator $faker) {
    return [
        'title' =>  $faker->word ,
        'description' =>  $faker->text ,
    ];
});

Lo que haría falta es hacer el llamado de este factory desde un seeder. Para ello vamos a crear uno con el siguiente comando en consola:

php artisan make:seed NotesTableSeeder

el cual quedaría así, para crear 10 notas:

<?php

use App\Note;
use Illuminate\Database\Seeder;

class NotesTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(Note::class)->times(10)->create();
    }
}

Agregar el llamado del seeder en el archivo database/seeds/DatabaseSeeder.php

$this->call(NotesTableSeeder::class);

Por último, podemos ejecutar la migración con los seeds para comprobar, lo hacemos con el siguiente comando:

php artisan migrate:refresh --seed

Ya podemos revisar nuestra Base de Datos para confirmar la creación de los registros.

bd

Espero que sea de su agrado y les sea de utilidad. Cuéntanos,  ¿Qué te ha parecido?, comentarios y/o dudas son bien recibidas. Recuerda compartir este y demás tutoriales en las redes sociales.

Enlaces recomendados

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Editar archivos Sass en Laravel con Chrome Developer Tools Lección siguiente Como integrar Google reCAPTCHA en formularios de login y registro de Laravel 5.2