Testarea în Laravel

Indiferent de aplicația cu care vă confruntați, testarea este un aspect important și adesea trecute cu vederea că trebuie să acordați atenția pe care o merită. Astăzi o vom discuta în contextul cadrului web Laravel.

De fapt, Laravel susține deja cadrul de testare PHPUnit în nucleul propriu-zis. PHPUnit este unul dintre cele mai populare și mai acceptate cadre de testare din comunitatea PHP. Vă permite să creați ambele tipuri de unități de testare și funcționale.

Vom începe cu o introducere de bază pentru testarea unitară și funcțională. Pe măsură ce continuăm, vom explora modul de a crea teste unitare și funcționale în Laravel. Presupun că sunteți familiarizat cu elementele de bază ale cadrului PHPUnit, așa cum o vom explora în contextul lui Laravel în acest articol.

Teste unitare și funcționale

Dacă sunteți deja familiarizat cu cadrul PHPUnit, trebuie să știți că puteți împărți testele în două teste de unități arome și teste funcționale.

În testele de unitate, testați corectitudinea unei anumite funcții sau a unei metode. Mai important, testați o singură bucată din logica codului dvs. la un moment dat.

În dezvoltarea dvs., dacă descoperiți că metoda pe care ați implementat-o ​​conține mai mult de o unitate logică, este mai bine să o divizați în mai multe metode, astfel încât fiecare metodă să aibă o singură bucată de cod logică și testabilă.

Să aruncăm o privire rapidă la un exemplu care este un caz ideal pentru testarea unităților.

funcția publică getNameAttribute (valoare $) return ucfirst (valoare $); 

După cum puteți vedea, metoda face un singur lucru. Utilizează ucfirst pentru a converti un titlu într-un titlu care începe cu majuscule.

În timp ce testul unitar este folosit pentru a testa corectitudinea unei singure unități logice de cod, testul funcțional, pe de altă parte, vă permite să testați corectitudinea unui caz specific de utilizare. Mai exact, vă permite să simulați acțiunile efectuate de utilizator într-o aplicație pentru a rula un caz de utilizare specifică.

De exemplu, puteți implementa un test de funcționare funcțional pentru anumite funcții de conectare care pot implica următorii pași.

  • Creați solicitarea GET pentru a accesa pagina de conectare.
  • Verificați dacă suntem pe pagina de conectare.
  • Generați solicitarea POST pentru a încărca datele în pagina de conectare.
  • Verificați dacă sesiunea a fost creată cu succes.

Deci așa trebuie să creați cazul de test funcțional. Din următoarea secțiune, vom crea exemple care să demonstreze modul de creare a cazurilor de testare unitară și funcțională în Laravel.

Configurarea condițiilor prealabile

Înainte de a începe și de a crea teste reale, trebuie să stabilim câteva lucruri care vor fi folosite în testele noastre.

Vom crea modelul Post și migrația conexă pentru a începe. Continuați și rulați următoarea comandă artizanală pentru a crea Post model.

$ php artisan face: model post-migrare

Comanda de mai sus ar trebui să creeze Post clasa de model și migrarea bazei de date asociate.

Post clasa de modele ar trebui să arate ca:

Fișierul de migrare a bazei de date ar trebui să fie creat la Bază de date / migrări / YYYY_MM_DD_HHMMSS_create_posts_table.php.

De asemenea, dorim să stocăm titlul postului. Să revizuim codul Post fișierul de migrare a bazei de date să arate după cum urmează.

incremente ( 'id'); $ Table-> string ( 'nume'); $ Table-> timestamps (); );  / ** * Reveniți la migrații. * * @return void * / funcția publică în jos () Schema :: dropIfExists ('posts'); 

După cum puteți vedea, am adăugat $ Table-> string ( 'name') pentru a stoca titlul postului. Apoi, trebuie doar să executați comanda de migrare pentru a crea acel tabel în baza de date.

$ php artizan migrează

De asemenea, să înlocuim Post cu următorul conținut.

Tocmai am adăugat accessor , care modifică titlul postului și exact ceea ce vom testa în cazul testului de unitate. Asta e în ceea ce privește Post model.

Apoi, vom crea un fișier de controler la app / HTTP / Controllers / AccessorController.php. Va fi util atunci când vom crea un caz de testare funcțional într-o etapă ulterioară.

obține ("id", 0); // încărcați postul solicitat $ post = Post :: find ($ post_id); // verificați numele proprietății return $ post-> name; 

În index , vom prelua post id-ul din parametrii de solicitare și vom încerca să încărcăm obiectul modelului post.

Să adăugăm și un traseu asociat în rute / web.php fişier.

Route :: get ('accessor / index', 'AccessorController @ index');

Și cu acest lucru, puteți rula URL-ul http://your-laravel-site.com/accessor/index pentru a vedea dacă funcționează conform așteptărilor.

Testarea unităților

În secțiunea anterioară am făcut configurarea inițială care va fi utilă pentru noi în secțiunile următoare și viitoare. În această secțiune, vom crea un exemplu care demonstrează conceptele de testare a unităților în Laravel.

Ca întotdeauna, Laravel oferă o comandă artizanală care vă permite să creați clasa de șablon de bază a casetei de testare a unității.

Rulați următoarea comandă pentru a crea AccessorTest unitate clasă caz ​​test. Este important să rețineți că treceți --unitate cuvântul cheie care creează unitatea de testare a unității și va fi plasat sub Teste / unitate director.

$ php artizan face: test AccessorTest - unitate

Și asta ar trebui să creeze următoarea clasă la Teste / unitate / AccessorTest.php.

assertTrue (true); 

Să o înlocuim cu un cod semnificativ.

Nume); // încărcați post utilizând Eloquent $ model_post = Post :: find (1); $ model_post_title = $ model_post-> nume; $ this-> assertEquals ($ db_post_title, $ model_post_title); 

După cum puteți vedea, codul este exact la fel cum ar fi fost în PHP. Tocmai am importat dependențe specifice Laravel care ne permit să folosim API-urile necesare. În testAccessorTest metoda, ar trebui să testăm corectitudinea getNameAttribute metodă a Post model.

Pentru a face acest lucru, am extras un exemplu de post din baza de date și am pregătit rezultatul așteptat în $ db_post_title variabil. Apoi, vom încărca aceeași postare utilizând modelul Eloquent care execută getNameAttribute precum și pregătirea postului. În cele din urmă, folosim assertEquals pentru a compara ambele variabile ca de obicei.

Deci, asta e modul de pregătire a cazurilor de test unitate în Laravel.

Functional Testing

În această secțiune, vom crea cazul de testare funcțional care testează funcționalitatea controlerului pe care l-am creat mai devreme.

Rulați următoarea comandă pentru a crea AccessorTest clasa funcțională de testare funcțională. Deoarece nu folosim --unitate cuvânt cheie, acesta va fi tratat ca un caz de testare funcțional și plasat sub Teste / Funcție director.

$ php artisan face: test AccessorTest

Va crea următoarea clasă la Teste / Caracteristică / AccessorTest.php.

assertTrue (true); 

Să o înlocuim cu următorul cod.

Nume); $ răspuns = $ acest-> obține ('/ accessor / index? id = 1'); $ Response-> assertStatus (200); $ Response-> assertSeeText ($ db_post_title); 

Din nou, codul ar trebui să pară familiar celor care au experiență anterioară în testarea funcțională.

În primul rând, preluăm un exemplu de post din baza de date și pregătim rezultatul așteptat în $ db_post_title variabil. În continuare, încercăm să simulam / Accesor / index? Id = 1 Cereți GET și luați răspunsul acestei solicitări în răspuns $ variabil.

În continuare, am încercat să potrivim codul de răspuns în secțiunea răspuns $ variabilă cu codul de răspuns așteptat. În cazul nostru, ar trebui să fie 200, deoarece ar trebui să obținem un răspuns valid pentru solicitarea noastră GET. Mai mult, răspunsul ar trebui să conțină un titlu care începe cu majuscule și exact acelea pe care încercăm să le potrivim folosind assertSeeText metodă.

Și acesta este un exemplu al cazului de testare funcțională. Acum, avem tot ce ne-ar putea face testele împotriva noastră. Să mergem mai departe și să executați următoarea comandă în rădăcina aplicației pentru a rula toate testele.

$ PHPUnit

Ar trebui să executați toate testele din aplicația dvs. Ar trebui să vedeți o ieșire standard PHPUnit care afișează starea testelor și afirmațiilor din aplicația dvs..

Și cu asta, suntem la sfârșitul acestui articol.

Concluzie

Astăzi, am analizat detaliile testelor din Laravel, care susțin deja deja baza PHPUnit. Articolul a început cu o introducere de bază la testarea unitară și funcțională și, pe măsură ce ne-am mutat, am explorat specificul testării în contextul Laravel.

În acest proces, am creat o serie de exemple care au demonstrat cum ați putea crea cazuri de testare unitară și funcțională folosind comanda artizanilor.

Dacă începeți doar cu Laravel sau doriți să vă extindeți cunoștințele, site-ul sau aplicația cu extensii, avem o varietate de lucruri pe care le puteți studia în piața Envato.

Nu ezitați să vă exprimați gândurile folosind feed-ul de mai jos!

Cod