Cum să generați și să utilizați înregistrări false cu fabricile de modele Laravel

Publicat: 2023-04-28

Testarea este esențială pentru dezvoltarea web. Fabricile Laravel Model definesc înregistrările bazei de date într-un mod previzibil și ușor de replicat, astfel încât testele aplicației dvs. să fie consecvente și controlate. Fabricile de modele definesc un set de atribute implicite pentru fiecare dintre modelele dvs. Eloquent.

De exemplu, dacă creați o aplicație de blogging care să permită autorilor și moderatorilor să aprobe comentariile înainte de a fi difuzate, ar trebui să testați dacă funcția funcționează corect înainte de a o implementa utilizatorilor dvs. Toate acestea necesită date de testare.

Pentru a testa aplicația de blogging descrisă mai sus, aveți nevoie de date de comentarii pentru a imita și testa funcționalitatea aplicației dvs. Laravel vă permite să faceți acest lucru fără a primi comentarii de la utilizatorii reali, folosind fabricile Laravel și Faker pentru a genera date false.

Acest articol explică cum să obțineți date despre comentarii fără comentarii de la utilizatori reali.

Cerințe preliminare

Pentru a finaliza acest tutorial, trebuie să fii familiarizat cu următoarele:

  • XAMPP
  • Compozitor

XAMPP este o distribuție Apache gratuită și ușor de instalat care conține PHP, Perl și MariaDB - o bază de date MySQL. Acest tutorial folosește cea mai recentă versiune, 8.1.10, care instalează PHP 8.1.10. Citiți acest articol dacă instalați XAMPP pentru MacOS sau acest ghid pentru Linux. Acest tutorial folosește XAMPP pe Windows.

Composer este un instrument care vă permite să definiți, să instalați și să descărcați pachetele de care depinde aplicația dvs. web în dezvoltare și producție. Acest tutorial folosește versiunea v2.4.4 a Composer, care necesită versiunea PHP 7.2+. Utilizați Composer pentru a instala programul de instalare Laravel pentru acest tutorial.

De asemenea, puteți descărca codul complet pentru ca proiectul să urmeze.

Testarea aplicației nu ar trebui să fie o idee ulterioară. Fabricile de modele Laravel pot ajuta! Iată cum ️ Faceți clic pentru a trimite pe Tweet

Cum se configurează proiectul

În această secțiune, veți crea un proiect Laravel și îl veți conecta la o bază de date. Să aruncăm o privire la tot ceea ce presupune și cum să-l realizăm.

Instalați Laravel Installer

Pentru a crea rapid un proiect Laravel, instalați programul de instalare Laravel:

 composer global require laravel/installer

Acest cod instalează programul de instalare Laravel la nivel global pe mașina dvs.

Creați un proiect Laravel

Apoi, creați un proiect Laravel rulând următoarele:

 laravel new app-name

Acest cod pornește un nou proiect Laravel și instalează toate dependențele:

Crearea proiectului Laravel
Crearea proiectului Laravel

O altă modalitate mai ușoară de a instala Laravel este să folosești Composer direct.

 composer create-project laravel/laravel app-name

Nu trebuie să instalați programul de instalare Laravel atunci când utilizați metoda de mai sus.

Porniți aplicația

Acum puteți schimba directorul la numele aplicației și puteți începe proiectul folosind instrumentul de interfață de linie de comandă (CLI) al lui Laravel, Artisan:

 php artisan serve

Acest cod începe proiectul și îl conectează la localhost:8000 sau la orice alt port disponibil dacă portul 8000 este în uz. Pe localhost:8000, ar trebui să vedeți ceva de genul acesta:

Pagina de pornire a site-ului Laravel
Laravel

Creați o bază de date

Pentru a vă conecta aplicația la o bază de date, trebuie să creați o nouă bază de date folosind interfața grafică de utilizator PHPMyAdmin a XAMPP. Accesați localhost/phpmyadmin și faceți clic pe Nou pe bara laterală:

Formularul Creare bază de date în PHPMyAdmin
Creați formularul bazei de date

Imaginea de mai sus arată formularul Creare bază de date cu app_name ca nume al bazei de date.

Faceți clic pe Creare pentru a crea o bază de date.

Editați fișierul .env

Pentru a vă conecta aplicația la o bază de date, trebuie să editați partea DB a fișierului .env :

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

Acest cod completează acreditările bazei de date cu numele bazei de date, numele de utilizator, portul, parola și gazda. Acum sunteți gata să începeți să creați fabrici și modele.

Notă: Înlocuiți valorile cu acreditările bazei de date. De asemenea, dacă întâmpinați eroarea „Acces refuzat pentru utilizator”, puneți valorile pentru DB_USERNAME și DB_PASSWORD între ghilimele duble.

Cum se generează date false

După ce ai creat aplicația și ai conectat-o ​​la baza de date, acum poți crea fișierele necesare pentru a genera date false în baza de date.

Creați modelul de comentarii

Creați fișierul model pentru a interacționa cu tabelele bazei de date. Pentru a crea un model, utilizați Artisan:

 php artisan make:model Comment

Acest cod creează un fișier Comment.php în dosarul aplicație/ modele cu un cod standard. Adăugați următorul cod sub use HasFactory; linia:

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

Acest cod listează câmpurile pe care doriți să le permiteți alocări în masă, deoarece Laravel vă protejează baza de date de alocările în masă în mod implicit. Fișierul model Comentariu ar trebui să arate acum astfel:

Fișierul model Comentariu
Comentează fișierul model

Creați fișierul de migrare

După crearea fișierului model și declararea matricei $fillable , trebuie să creați fișierul de migrare folosind comanda de mai jos:

 php artisan make:migration create_comments_table

Notă: convenția de denumire pentru crearea migrațiilor în Laravel este de obicei snake_case , cunoscută și sub denumirea de underscore_case . Primul cuvânt este acțiunea, al doilea cuvânt este un plural al modelului, iar ultimul cuvânt este caracteristica care este creată în cadrul proiectului. Aceasta înseamnă că veți scrie create_books_table atunci când creați o migrare pentru un model de carte.

Acest cod creează un fișier numit aaaa_mm_dd_hhmmss_create_comments_table în interiorul folderului de bază de date/migrații .

Apoi, editați funcția de sus din aaaa_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(); }); }

Acest cod creează o schemă care creează un tabel cu coloanele: id , name , email , body , approved , likes și timestamps .

Rulați Migrațiile

Crearea și editarea fișierului de migrare nu va face nimic până când nu le executați folosind linia de comandă. Dacă te uiți la managerul bazei de date, acesta este încă gol.

Rulați migrațiile folosind Artisan:

 php artisan migrate

Această comandă rulează toate migrările în baza de date/migrări, deoarece este prima migrare de la crearea aplicației:

Migrații reușite
Migrații reușite

Următoarea imagine arată toate fișierele de migrare pe care le-ați rulat. Fiecare reprezintă un tabel în baza de date:

Baza de date după migrare
Baza de date după migrare

Creați fișierul CommentFactory

Creați un fișier din fabrică care conține funcția dvs. de definiție. Pentru această demonstrație, veți crea o fabrică folosind Artisan:

 php artisan make:factory CommentFactory.php

Acest cod creează un fișier CommentFactory .php în folderul baza de date/fabrici .

Funcția de definiție

Funcția din CommentFactory definește modul în care Faker generează date false. Editează-l pentru a arăta astfel:

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

Acest cod îi spune lui Faker să genereze următoarele:

  • Un nume
  • O adresă de e-mail
  • Un paragraf care conține 45 de propoziții
  • O valoare aprobată care poate fi doar adevărată sau falsă
  • Un număr aleatoriu între 0 și 9999

Conectați modelul de comentarii la CommentFactory

Conectați modelul Comment la CommentFactory declarând o variabilă $model protejată deasupra definiției:

 protected $model = Comment::class;

De asemenea, adăugați use App\Models\Comment; la dependențele fișierelor. Fișierul CommentFactory ar trebui să arate acum astfel:

Fișierul CommentFactory
Fișierul CommentFactory

Cum să seed baza de date

Semănarea în programare înseamnă generarea de date false aleatorii pentru o bază de date în scopuri de testare.

Acum că ați creat modelul, ați executat migrații și ați creat definiția în CommentFactory, rulați seeder-ul folosind fișierul DatabaseSeeder .

Creați fișierul CommentSeeder

Creați un fișier seeder care utilizează fabrica pentru a genera datele:

 php artisan make:seeder CommentSeeder.php

Acest cod creează un fișier CommentSeeder .php în folderul baza de date/seeders .

Editați funcția Run

Conectați modelul de comentariu la CommentSeeder. Adăugați următorul cod în cadrul funcției de rulare:

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

Acest cod îi spune lui CommentSeeder să folosească modelul Comment și funcția de definire a CommentFactory pentru a genera 50 de comentarii în baza de date. De asemenea, adăugați use App\Models\Comment; la dependențele fișierelor. Fișierul CommentSeeder ar trebui să arate acum astfel:

Fișierul CommentSeeder
Fișier CommentSeeder

Notă: Puteți configura Faker pentru a crea date locale. De exemplu, îl puteți seta să genereze nume italiene în loc de nume aleatorii setând faker_locale în fișierul app/config.php la it_IT . Puteți citi mai multe despre Faker Locales în acest ghid.

Rulați Semănătorul

Apoi, rulați fișierul seeder cu Artisan:

 php artisan db:seed --class=CommentSeeder

Acest cod rulează fișierul seeder și generează 50 de rânduri de date false în baza de date.

Semințele bazei de date au succes
Semințele bazei de date au succes

Baza de date ar trebui să aibă acum 50 de rânduri de date false pe care le puteți utiliza pentru a testa funcțiile aplicației dvs.:

50 de rânduri de date în baza de date
50 de rânduri de date în baza de date

Cum să resetați baza de date

Când utilizați datele generate pentru testare, resetați baza de date de fiecare dată când executați un test. Să presupunem că doriți să testați funcția de comutare a comentariilor aprobată. Reîmprospătați baza de date după fiecare test pentru a vă asigura că datele generate anterior nu vor interfera cu testele viitoare.

Utilizați RefreshDatabase

Reîmprospătați baza de date folosind caracteristica RefreshDatabase din fișierul de testare .

Navigați la ExampleTest.php în dosarul teste/Feature, la comentariu use Illuminate\Foundation\Testing\RefreshDatabase; și adăugați următoarea linie de cod deasupra funcției test_the_application_returns_a_successful_response :

 use RefreshDatabase;

Fișierul ExampleTest.php ar trebui să arate acum astfel:

Fișierul ExampleTest
Exemplu de fișier Test

Rulați testul

După adăugarea trăsăturii RefreshDatabase la fișierul de testare, rulați testul folosind Artisan:

 php artisan test

Acest cod rulează toate testele din aplicație și reîmprospătează baza de date după teste, așa cum se arată în imaginea de mai jos:

Un test artizanal reușit
Un test artizanal reușit

Acum, verificați baza de date pentru a vedea tabelul de comentarii gol:

O bază de date goală de comentarii
Baza de date de comentarii goală
Introducerea manuală a datelor este de domeniul trecutului! Automatizați testarea aplicației dvs. cu Laravel Model Factory. Începeți aici! Faceți clic pentru a trimite pe Tweet

rezumat

Acest articol a descris cum să creați un proiect Laravel, să îl conectați la o bază de date și să creați și să configurați fișiere de modele, migrare, fabrică și seeder pentru a genera date aleatorii pentru baza de date. De asemenea, a discutat despre cum să resetați baza de date după rularea testelor.

Ați văzut acum cum Laravel Factories și Faker facilitează generarea oricărei cantități de date de testare în câteva minute pentru a testa o aplicație sau chiar ca substituent - cu o configurație minimă.

Când aplicația dvs. Laravel este gata de implementare, puteți face acest lucru prin serviciile de găzduire a aplicațiilor Kinsta rapid și eficient.