Come generare e utilizzare record falsi con le fabbriche di modelli di Laravel

Pubblicato: 2023-04-28

I test sono essenziali per lo sviluppo web. Le fabbriche di modelli di Laravel definiscono i record del database in modo prevedibile e facilmente replicabile in modo che i test delle app siano coerenti e controllati. Le fabbriche di modelli definiscono un set di attributi predefiniti per ciascuno dei tuoi modelli Eloquent.

Ad esempio, se stai realizzando un'app di blog che consente ad autori e moderatori di approvare i commenti prima che vengano pubblicati, dovresti verificare se la funzione funziona correttamente prima di distribuirla ai tuoi utenti. Tutto ciò richiede dati di test.

Per testare l'app di blogging descritta sopra, hai bisogno dei dati dei commenti per imitare e testare la funzionalità della tua applicazione. Laravel ti consente di farlo senza ricevere commenti dagli utenti reali utilizzando le fabbriche di Laravel e Faker per generare dati falsi.

Questo articolo spiega come ottenere i dati dei commenti senza commenti da utenti reali.

Prerequisiti

Per completare questo tutorial, devi avere familiarità con quanto segue:

  • XAMPP
  • Compositore

XAMPP è una distribuzione Apache gratuita e facile da installare che contiene PHP, Perl e MariaDB, un database MySQL. Questo tutorial utilizza l'ultima versione, 8.1.10, che installa PHP 8.1.10. Leggi questo articolo se installi XAMPP per MacOS o questa guida per Linux. Questo tutorial utilizza XAMPP su Windows.

Composer è uno strumento che ti consente di definire, installare e scaricare i pacchetti da cui dipende la tua app Web in fase di sviluppo e produzione. Questo tutorial utilizza la versione v2.4.4 di Composer, che richiede PHP versione 7.2+. Usi Composer per installare il programma di installazione di Laravel per questo tutorial.

Puoi anche scaricare il codice completo per il progetto da seguire.

Testare la tua app non dovrebbe essere un ripensamento. Le fabbriche di modelli di Laravel possono aiutarti! Ecco come ️ Clicca per twittare

Come impostare il progetto

In questa sezione, creerai un progetto Laravel e lo collegherai a un database. Diamo un'occhiata a tutto ciò che comporta e come realizzarlo.

Installa il programma di installazione di Laravel

Per creare rapidamente un progetto Laravel, installa il programma di installazione di Laravel:

 composer global require laravel/installer

Questo codice installa il programma di installazione di Laravel a livello globale sulla tua macchina.

Crea un progetto Laravel

Successivamente, crea un progetto Laravel eseguendo quanto segue:

 laravel new app-name

Questo codice avvia un nuovo progetto Laravel e installa tutte le dipendenze:

Creazione del progetto Laravel
Creazione del progetto Laravel

Un altro modo più semplice per installare Laravel è utilizzare direttamente Composer.

 composer create-project laravel/laravel app-name

Non è necessario installare il programma di installazione di Laravel quando si utilizza il metodo sopra.

Avvia l'app

Ora puoi cambiare la directory in nome-app e avviare il progetto utilizzando lo strumento dell'interfaccia della riga di comando (CLI) di Laravel, Artisan:

 php artisan serve

Questo codice avvia il progetto e lo connette a localhost:8000 oa qualsiasi altra porta disponibile se la porta 8000 è in uso. Su localhost:8000, dovresti vedere qualcosa del genere:

La home page del sito web di Laravel
Laravel

Crea una banca dati

Per connettere la tua app a un database, devi creare un nuovo database utilizzando l'interfaccia utente grafica PHPMyAdmin di XAMPP. Vai su localhost/phpmyadmin e fai clic su Nuovo nella barra laterale:

Il modulo Crea database in PHPMyAdmin
Crea modulo database

L'immagine sopra mostra il modulo Crea database con app_name come nome del database.

Fare clic su Crea per creare un database.

Modifica il file .env

Per connettere la tua app a un database, devi modificare la parte DB del file .env :

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

Questo codice riempie le credenziali del database con il nome del database, il nome utente, la porta, la password e l'host. Ora sei pronto per iniziare a creare fabbriche e modelli.

Nota: sostituire i valori con le credenziali del database. Inoltre, se si verifica l'errore "Accesso negato per l'utente", inserire i valori per DB_USERNAME e DB_PASSWORD tra virgolette.

Come generare dati falsi

Dopo aver creato l'app e averla collegata al database, ora puoi creare i file necessari per generare dati falsi nel database.

Creare il modello di commento

Creare il file modello per interagire con le tabelle del database. Per creare un modello, usa Artisan:

 php artisan make:model Comment

Questo codice crea un file Comment.php all'interno della cartella app/M odels con del codice boilerplate. Aggiungere il seguente codice sotto use HasFactory; linea:

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

Questo codice elenca i campi che vuoi consentire assegnazioni di massa perché Laravel protegge il tuo database dalle assegnazioni di massa per impostazione predefinita. Il file del modello di commento dovrebbe ora apparire così:

Il file del modello di commento
File del modello di commento

Crea il file di migrazione

Dopo aver creato il file modello e aver dichiarato l'array $fillable , è necessario creare il file di migrazione utilizzando il comando seguente:

 php artisan make:migration create_comments_table

Nota: la convenzione di denominazione per la creazione di migrazioni in Laravel è generalmente snake_case , nota anche come underscore_case . La prima parola è l'azione, la seconda parola è un plurale del modello e l'ultima parola è la caratteristica che viene creata all'interno del progetto. Ciò significa che scriverai create_books_table durante la creazione di una migrazione per un modello Book.

Questo codice crea un file denominato yyyy_mm_dd_hhmmss_create_comments_table all'interno della cartella database/migrations .

Successivamente, modifica la funzione up all'interno di 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(); }); }

Questo codice crea uno schema che crea una tabella con le colonne: id , name , email , body , approved , likes e timestamps .

Eseguire le migrazioni

La creazione e la modifica del file delle migrazioni non farà nulla finché non le esegui utilizzando la riga di comando. Se guardi il gestore del database, è ancora vuoto.

Esegui le migrazioni utilizzando Artisan:

 php artisan migrate

Questo comando esegue tutte le migrazioni all'interno del database/migrazioni perché è la prima migrazione dalla creazione dell'app:

Migrazioni riuscite
Migrazioni riuscite

L'immagine seguente mostra tutti i file di migrazione che hai eseguito. Ognuno rappresenta una tabella nel database:

Il Database dopo le migrazioni
Database dopo le migrazioni

Crea il file CommentFactory

Crea un file factory che contenga la tua funzione di definizione. Per questa dimostrazione, creerai una fabbrica usando Artisan:

 php artisan make:factory CommentFactory.php

Questo codice crea un file CommentFactory .php all'interno della cartella database/factories .

La funzione di definizione

La funzione all'interno di CommentFactory definisce come Faker genera dati falsi. Modificalo in modo che assomigli a questo:

 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) ]; }

Questo codice dice a Faker di generare quanto segue:

  • Un nome
  • Un indirizzo email
  • Un paragrafo che contiene 45 frasi
  • Un valore approvato che può essere solo vero o falso
  • Un numero casuale compreso tra 0 e 9999

Collegare il modello di commento a CommentFactory

Collega il modello Comment a CommentFactory dichiarando una variabile $model protetta sopra la definizione:

 protected $model = Comment::class;

Inoltre, aggiungi use App\Models\Comment; alle dipendenze dei file. Il file CommentFactory dovrebbe ora apparire così:

Il file CommentFactory
Il file CommentFactory

Come seminare il database

Seeding nella programmazione significa generare dati falsi casuali per un database a scopo di test.

Ora che hai creato il modello, eseguito le migrazioni e creato la definizione all'interno di CommentFactory, esegui il seeder utilizzando il file DatabaseSeeder .

Crea il file CommentSeeder

Crea un file seeder che utilizza factory per generare i dati:

 php artisan make:seeder CommentSeeder.php

Questo codice crea un file CommentSeeder .php all'interno della cartella database/seeder .

Modifica la funzione Esegui

Connetti il ​​modello Comment a CommentSeeder. Aggiungere il seguente codice all'interno della funzione run:

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

Questo codice indica a CommentSeeder di utilizzare il modello Comment e la funzione di definizione di CommentFactory per generare 50 commenti all'interno del database. Inoltre, aggiungi use App\Models\Comment; alle dipendenze dei file. Il file CommentSeeder dovrebbe ora apparire così:

Il file CommentSeeder
Comment Seeder file

Nota: puoi configurare Faker per creare dati locali. Ad esempio, puoi impostarlo per generare nomi italiani invece di nomi casuali impostando faker_locale all'interno del file app/config.php su it_IT . Puoi leggere di più su Faker Locales in questa guida.

Esegui la seminatrice

Quindi, esegui il file seeder con Artisan:

 php artisan db:seed --class=CommentSeeder

Questo codice esegue il file seeder e genera 50 righe di dati falsi nel database.

Seme del database riuscito
Seme del database riuscito

Il database ora dovrebbe avere 50 righe di dati falsi che puoi utilizzare per testare le funzioni della tua applicazione:

50 righe di dati nel database
50 righe di dati nel database

Come reimpostare il database

Quando si utilizzano i dati generati per il test, reimpostare il database ogni volta che si esegue un test. Supponiamo di voler testare la funzione di attivazione/disattivazione dei commenti approvati. Aggiorna il database dopo ogni test per garantire che i dati generati in precedenza non interferiscano con i test futuri.

Utilizzare AggiornaDatabase

Aggiorna il database utilizzando il tratto RefreshDatabase all'interno del file di test .

Passare a ExampleTest.php all'interno della cartella tests/Feature al commento use Illuminate\Foundation\Testing\RefreshDatabase; e aggiungi la seguente riga di codice sopra la funzione test_the_application_returns_a_successful_response :

 use RefreshDatabase;

Il file ExampleTest.php dovrebbe ora apparire così:

Il file EsempioTest
EsempioTest file

Esegui il test

Dopo aver aggiunto il tratto RefreshDatabase al file di test, esegui il test utilizzando Artisan:

 php artisan test

Questo codice esegue tutti i test nell'app e aggiorna il database dopo i test, come mostrato nell'immagine seguente:

Un test Artigiano riuscito
Un test Artigiano riuscito

Ora, controlla il database per vedere la tabella dei commenti vuota:

Un database di commenti vuoto
Database dei commenti vuoto
L'inserimento manuale dei dati appartiene al passato! Automatizza i test delle tue app con Laravel Model Factorys. Inizia qui! Fai clic per twittare

Riepilogo

Questo articolo ha spiegato come creare un progetto Laravel, collegarlo a un database e creare e configurare file di modelli, migrazione, factory e seeder per generare dati casuali per il database. Ha anche discusso su come reimpostare il database dopo aver eseguito i test.

Ora hai visto come Laravel Factories e Faker semplificano la generazione di qualsiasi quantità di dati di test in pochi minuti per testare un'applicazione o anche come segnaposto, con una configurazione minima.

Quando la vostra app Laravel è pronta per essere distribuita, potete farlo sui servizi di hosting delle applicazioni di Kinsta in modo rapido ed efficiente.