I test sono essenziali per lo sviluppo web. Le model factory di Laravel definiscono i record del database in modo prevedibile e facilmente replicabile, in modo che i test delle vostre applicazioni siano coerenti e controllati. Le model factory definiscono un insieme di attributi predefiniti per ciascuno dei vostri modelli Eloquent.

Per esempio, se state realizzando un’applicazione di blogging che consente agli autori e ai moderatori di approvare i commenti prima che vengano pubblicati, dovete verificare che la funzione sia impostata correttamente prima di distribuirla ai vostri utenti. Tutto questo richiede dati di prova.

Per testare l’applicazione di blogging descritta sopra, avete bisogno dei dati dei commenti per imitare e testare le funzionalità della vostra applicazione. Laravel vi permette di farlo senza ottenere commenti dagli utenti reali, usando le factory di Laravel e Faker per generare dati falsi.

Questo articolo vi spiega come ottenere i dati dei commenti quando non avete commenti da utenti reali.

Prerequisiti

Per completare questo tutorial, dovete conoscere quanto segue:

  • XAMPP
  • Composer

XAMPP è una distribuzione Apache gratuita e facile da installare che contiene PHP, Perl e MariaDB, un database MySQL. Questo tutorial utilizza l’ultima versione, la 8.1.10, che installa PHP 8.1.10. Leggete questo articolo se volete installare XAMPP per MacOS o questa guida se usate Linux. In questo tutorial usiamo XAMPP su Windows.

Composer è uno strumento che vi permette di definire, installare e scaricare i pacchetti da cui dipende la vostra applicazione web in fase di sviluppo e produzione. In questo tutorial usiamo la versione v2.4.4 di Composer , che richiede la versione 7.2+ di PHP. Useremo Composer per installare il programma di installazione di Laravel.

Potete anche scaricare il codice completo del progetto per seguirlo.

Come impostare il progetto

In questa sezione creeremo un progetto Laravel e lo collegheremo a un database. Vediamo tutto ciò che comporta e come realizzarlo.

Installare il programma di installazione di Laravel

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

composer global require laravel/installer

Questo codice installa il programma di installazione di Laravel a livello globale sul computer.

Creare un progetto Laravel

Quindi create un progetto Laravel eseguendo questo codice:

laravel new app-name

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

Codice di creazione del progetto Laravel
Creare il progetto Laravel

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

composer create-project laravel/laravel app-name

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

Avviare l’app

Ora potete cambiare la directory in app-name e avviare il progetto utilizzando lo strumento dell’interfaccia a riga di comando (CLI) di Laravel, Artisan:

php artisan serve

Questo codice avvia il progetto e lo connette a localhost:8000 o a qualsiasi altra porta disponibile se la porta 8000 è in uso. Su localhost:8000, dovreste vedere qualcosa di simile a questo:

L’homepage del sito di Laravel
Laravel

Creare un database

Per collegare la vostra applicazione a un database, dovete creare un nuovo database utilizzando l’interfaccia grafica PHPMyAdmin di XAMPP. Andate su localhost/phpmyadmin e fate clic su New nella barra laterale:

Il modulo Create Database per creare un database in PHPMyAdmin
Modulo Create database

L’immagine qui sopra mostra il modulo Create database con app_name come nome del database.

Fate clic su Create per creare un database.

Modifica del file .env

Per collegare la vostra applicazione a un database, dovete 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 inserisce le credenziali del database con il nome del database, il nome utente, la porta, la password e l’host. Ora avete tutto pronto per iniziare a creare factory e modelli.

Nota: Sostituite i valori con le credenziali del vostro database. Inoltre, se si verifica l’errore “Access denied for user”, inserite i valori di DB_USERNAME e DB_PASSWORD tra virgolette doppie.

Come generare dati falsi

Dopo aver creato l’applicazione e averla collegata al database, potete creare i file necessari per generare dati falsi nel database.

Creare il modello Comment

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

php artisan make:model Comment

Questo codice crea un file Comment.php all’interno della cartella app/Models con del codice di base. Aggiungete il seguente codice sotto la riga use HasFactory;:

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

Questo codice elenca i campi che volete permettere di assegnare in massa perché Laravel protegge il vostro database dalle assegnazioni in massa per impostazione predefinita. Il file del modello Comment dovrebbe ora avere questo aspetto:

Il file del modello dei commenti
File del modello Comment

Creare il file di migrazione

Dopo aver creato il file del modello e aver dichiarato l’array $fillable, dovete creare il file di migrazione usando il comando seguente:

php artisan make:migration create_comments_table

Nota: La convenzione di denominazione per la creazione di migrazioni in Laravel è solitamente snake_case, noto anche come underscore_case. La prima parola è l’azione, la seconda è un plurale del modello e l’ultima è la funzione che viene creata all’interno del progetto. Ciò significa che scriverete create_books_table quando create una migrazione per un modello Book (libro).

Questo codice crea un file chiamato yyyy_mm_dd_hhmmss_create_comments_table all’interno della cartella database/migrations.

Successivamente, modificate 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, a sua volta, 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 serviranno a nulla finché non le eseguirete tramite la riga di comando. Se osservate il database manager, è ancora vuoto.

Eseguite le migrazioni con Artisan:

php artisan migrate

Questo comando esegue tutte le migrazioni all’interno di database/migrations perché è la prima migrazione dalla creazione dell’applicazione:

Elenco delle migrazioni riuscite
Migrazioni riuscite

L’immagine seguente mostra tutti i file di migrazione eseguiti. Ognuno di essi rappresenta una tabella del database:

Schermata del database dopo la migrazione
Database dopo le migrazioni

Creare il file CommentFactory

Create un file factory che contenga la vostra funzione di definizione. Per questa dimostrazione, creerete un factory utilizzando 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 il modo in cui Faker genera i dati falsi. Modificatela in modo che assomigli a questa:

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 contenente 45 frasi
  • Un valore approvato che può essere solo vero o falso
  • Un numero casuale compreso tra 0 e 9999

Collegare il modello Comment alla CommentFactory

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

protected $model = Comment::class;

Inoltre, aggiungete use AppModelsComment; alle dipendenze del file. Il file CommentFactory dovrebbe ora avere questo aspetto:

Il file CommentFactory
Il file CommentFactory

Come fare il seeding del database

In programmazione, il termine “seeding” indica la generazione di dati falsi casuali per un database a scopo di test.

Ora che avete creato il modello, eseguito le migrazioni e creato la definizione all’interno di CommentFactory, eseguite il seeder utilizzando il file DatabaseSeeder.

Creare il file CommentSeeder

Create un file seeder che usi la factory per generare i dati:

php artisan make:seeder CommentSeeder.php

Questo codice crea un file CommentSeeder.php all’interno della cartella database/seeders.

Modificare la funzione Run

Collegate il modello Comment al CommentSeeder. Aggiungete il seguente codice all’interno della funzione run:

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

Questo codice indica al CommentSeeder di utilizzare il modello Comment e la funzione di definizione di CommentFactory per generare 50 commenti all’interno del database. Inoltre, aggiungete il sito use AppModelsComment; alle dipendenze del file. Il file CommentSeeder dovrebbe ora avere il seguente aspetto:

Il file CommentSeeder
File CommentSeeder

Nota: Potete configurare Faker per creare dati locali. Ad esempio, potete impostare la generazione di nomi italiani invece di nomi casuali impostando faker_locale nel file app/config.php su it_IT. Trovate ulteriori informazioni su Faker Locales in questa guida.

Eseguire il seeder

Successivamente, eseguite 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.

Avviso che conferma che il seed del database è avvenuto correttamente
Seed del database avvenuta con successo

Il database dovrebbe ora contenere 50 righe di dati falsi che potrete usare per testare le funzioni della vostra applicazione:

Schermata del database con 50 righe di dati
50 righe di dati nel database

Come resettare il database

Quando usate i dati generati per i test, reimpostate il database ogni volta che eseguite un test. Supponiamo che vogliate testare la funzione di selezione dei commenti approvati. Aggiornate il database dopo ogni test per assicurarvi che i dati generati in precedenza non interferiscano con i test futuri.

Usare RefreshDatabase

Aggiornate il database utilizzando il tratto RefreshDatabase all’interno del file di test.

Andate su ExampleTest.php all’interno della cartella tests/Feature fino al commento use IlluminateFoundationTestingRefreshDatabase; e aggiungete la seguente riga di codice sopra la funzione test_the_application_returns_a_successful_response:

use RefreshDatabase;

Il file ExampleTest.php dovrebbe ora avere il seguente aspetto:

Schermata dell’editor di codice con il contenuto del file ExampleTest
File ExampleTest

Eseguire il test

Dopo aver aggiunto il tratto RefreshDatabase al file di test, eseguite il test con Artisan:

php artisan test

Questo codice esegue tutti i test dell’applicazione e aggiorna il database dopo i test, come mostrato nell’immagine sottostante:

Codice con un test Artisan test andato a buon fine
Un test Artisan andato a buon fine

Ora controllate il database per vedere la tabella dei commenti vuota:

Schermata del database dei commenti vuoto
Database dei commenti vuoto

Riepilogo

In questo articolo abbiamo visto come creare un progetto Laravel, collegarlo a un database e creare e configurare i modelli, le migrazioni, i factory e i file seeder per generare dati casuali per il database. Inoltre, abbiamo parlato di come resettare il database dopo aver eseguito i test.

Ora sapete in che modo Laravel Factories e Faker facilitano la generazione di qualsiasi quantità di dati di prova in pochi minuti per testare un’applicazione o anche solo come placeholder, con una configurazione minima.

Quando la vostra applicazione Laravel è pronta per essere distribuita, potete farlo con i servizi di Hosting di Applicazioni di Kinsta in modo rapido ed efficiente.

​​

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.