Testing i Laravel

Uansett hvilken applikasjon du har å gjøre med, er testing et viktig og ofte oversett aspekt som du bør gi oppmerksomheten det fortjener. I dag skal vi diskutere det i sammenheng med Laravel web-rammeverket.

Faktisk støtter Laravel allerede PHPUnit testing rammeverket i selve kjernen. PHPUnit er en av de mest populære og allment aksepterte testrammene på tvers av PHP-fellesskapet. Det lar deg lage begge typer tester og funksjonelle.

Vi starter med en grunnleggende introduksjon til enhet og funksjonell testing. Når vi går videre, undersøker vi hvordan du lager enhets- og funksjonstester i Laravel. Jeg antar at du er kjent med grunnleggende om PHPUnit-rammen som vi vil utforske det i sammenheng med Laravel i denne artikkelen.

Enhet og funksjonstester

Hvis du allerede er kjent med PHPUnit-rammene, bør du vite at du kan dele tester i to smaker-enhetstester og funksjonstester.

I enhetsprøver tester du korrektheten til en gitt funksjon eller metode. Enda viktigere, du tester et enkelt stykke av kodens logikk på et gitt tidspunkt.

I utviklingen din, hvis du finner ut at metoden du har implementert inneholder mer enn én logisk enhet, er det bedre å splitte det inn i flere metoder slik at hver metode har et enkelt logisk og testbart stykke kode.

La oss få en rask titt på et eksempel som er et ideelt tilfelle for enhetstesting.

offentlig funksjon getNameAttribute ($ value) return ucfirst ($ value); 

Som du kan se, gjør metoden en og en ting. Den bruker ucfirst funksjonen til å konvertere en tittel til en tittel som starter med store versjoner.

Mens enhetstesten brukes til å teste riktigheten av en enkelt logisk enhet av kode, kan funksjonstesten på den annen side gjøre det mulig å teste riktigheten av en bestemt brukstilstand. Mer spesifikt lar det deg simulere handlinger en bruker utfører i et program for å kjøre en bestemt brukstilstand.

For eksempel kan du implementere en funksjonell test sak for noen påloggingsfunksjonalitet som kan innebære følgende trinn.

  • Opprett GET-forespørselen for å få tilgang til påloggingssiden.
  • Sjekk om vi er på påloggingssiden.
  • Generer POST-forespørselen for å legge inn data på innloggingssiden.
  • Sjekk om økten ble opprettet med hell.

Så det er slik at du skal skape det funksjonelle testet. Fra neste avsnitt fremover lager vi eksempler som viser hvordan man oppretter enhetlige og funksjonelle testtilfeller i Laravel.

Sette opp forutsetningene

Før vi går videre og oppretter faktiske tester, må vi sette opp et par ting som skal brukes i våre tester.

Vi vil lage Post-modellen og tilhørende migrering til å begynne med. Gå videre og kjør følgende artisan kommando for å skape Post modell.

$ php artisan make: modell Post - migrasjon

Kommandoen ovenfor skal opprette Post modell klasse og en tilhørende database migrasjon også.

De Post modellklassen skal se ut som:

Og databasen migreringsfilen skal opprettes på database / vandringer / YYYY_MM_DD_HHMMSS_create_posts_table.php.

Vi ønsker også å lagre tittelen på innlegget. La oss revidere koden til Post database migreringsfil for å se ut som følgende.

trinn ( 'id'); $ Tabell-> string ( 'navn'); $ Tabell-> tidsstempler (); );  / ** * Omvendt migrasjonene. * * @return void * / offentlig funksjon ned () Schema :: dropIfExists ('posts'); 

Som du kan se, har vi lagt til $ Tabell-> string ( 'name') kolonne for å lagre tittelen på innlegget. Deretter trenger du bare å kjøre kommandoen Migrere for å faktisk lage det tabellen i databasen.

$ php håndverk migrere

La oss også erstatte Post modell med følgende innhold.

Vi har nettopp lagt til tilbehør metode, som endrer tittelen på innlegget, og det er akkurat det vi skal teste i vår testenhet. Det er så langt som Post modellen er bekymret.

Deretter skal vi opprette en kontrollerfil på app / Http / kontrollere / AccessorController.php. Det vil være nyttig for oss når vi oppretter funksjonell test saken på et senere tidspunkt.

få ("id", 0); // laste den etterspurgte posten $ post = Post :: finn ($ post_id); // sjekk navnet eiendommen returnere $ post-> navn; 

I index metode, henter vi post-ID fra forespørselsparametrene og prøver å laste postmodellobjektet.

La oss også legge til en tilknyttet rute i ruter / web.php fil.

Rute :: få ('accessor / index', 'AccessorController @ index');

Og med det på plass, kan du kjøre http://your-laravel-site.com/accessor/index URL for å se om det fungerer som forventet.

Enhetstesting

I den forrige delen gjorde vi det første oppsettet som skal være nyttig for oss i denne og kommende seksjoner. I denne delen skal vi lage et eksempel som demonstrerer begrepet enhetstesting i Laravel.

Som alltid gir Laravel en artisan-kommando som lar deg lage basemalerklassen i enhetstestet.

Kjør følgende kommando for å opprette AccessorTest enhets test case klasse. Det er viktig å merke seg at vi passerer --enhet Søkeord som lager enhetstestet, og det blir plassert under tester / Unit katalog.

$ php artisan make: test AccessorTest - enhet

Og det skal skape følgende klasse på tester / Enhet / AccessorTest.php.

assertTrue (true); 

La oss erstatte det med en meningsfull kode.

Navn); // last innlegg ved bruk av Eloquent $ model_post = Post :: finn (1); $ model_post_title = $ model_post-> navn; $ this-> assertEquals ($ db_post_title, $ model_post_title); 

Som du kan se, er koden akkurat det samme som det ville vært i kjernen PHP. Vi har nettopp importert Laravel-spesifikke avhengigheter som tillater oss å bruke de nødvendige APIene. I testAccessorTest metode, vi skal teste riktigheten av getNameAttribute metode av Post modell.

For å gjøre det, har vi hentet et eksempel innlegg fra databasen og forberedt forventet produksjon i $ db_post_title variabel. Deretter laster vi inn samme innlegg ved hjelp av Eloquent-modellen som kjører getNameAttribute metode for å forberede posttittelen. Til slutt bruker vi assertEquals metode for å sammenligne begge variablene som vanlig.

Så det er slik å forberede testenheter i Laravel.

Funksjonell testing

I denne delen lager vi det funksjonelle testkassen som tester funksjonaliteten til kontrolleren som vi opprettet tidligere.

Kjør følgende kommando for å opprette AccessorTest funksjonell test case klasse. Som vi ikke bruker --enhet søkeord, det blir behandlet som en funksjonell test sak og plassert under tester / Feature katalog.

$ php artisan make: test AccessorTest

Det vil opprette følgende klasse på tester / Funksjon / AccessorTest.php.

assertTrue (true); 

La oss erstatte den med følgende kode.

Navn); $ respons = $ this-> get ('/ accessor / index? id = 1'); $ Response-> assertStatus (200); $ Response-> assertSeeText ($ db_post_title); 

Igjen, koden skal se kjent for de som har tidligere erfaring med funksjonell testing.

For det første henter vi et eksempel innlegg fra databasen og forbereder forventet utgang i $ db_post_title variabel. Etter det prøver vi å simulere / Tilbehør / index? Id = 1 GET forespørsel og ta tak i svaret på den forespørselen i $ svar variabel.

Deretter har vi forsøkt å matche svarkoden i $ svar variabel med forventet svarkode. I vårt tilfelle bør det være 200 da vi bør få et gyldig svar for vår GET-forespørsel. Videre bør svaret inneholde en tittel som starter med store versjoner, og det er akkurat det vi prøver å matche ved hjelp av assertSeeText metode.

Og det er et eksempel på funksjonell test sak. Nå har vi alt vi kan klare våre tester mot. La oss fortsette og kjøre følgende kommando i roten til søknaden din for å kjøre alle tester.

$ PHPUnit

Det bør løpe alle tester i søknaden din. Du bør se en standard PHPUnit-utgang som viser statusen for tester og påstander i søknaden din.

Og med det er vi på slutten av denne artikkelen.

Konklusjon

I dag undersøkte vi detaljene for testing i Laravel, som allerede støtter PHPUnit i kjernen. Artikkelen startet med en grunnleggende introduksjon til enhetlig og funksjonell testing, og da vi flyttet på, undersøkte vi spesifikkene for testing i sammenheng med Laravel.

I prosessen opprettet vi en håndfull eksempler som viste hvordan du kunne lage enhetlige og funksjonelle testtilfeller ved hjelp av artisan-kommandoen.

Hvis du bare har startet med Laravel eller ser ut til å utvide din kunnskap, nettsted eller søknad med utvidelser, har vi en rekke ting du kan studere i Envato Market.

Ikke nøl med å uttrykke dine tanker ved å bruke feedet under!