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.
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.
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.
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 migrereLa 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 somPost
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 undertester / Unit
katalog.$ php artisan make: test AccessorTest - enhetOg 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 avgetNameAttribute
metode avPost
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ørergetNameAttribute
metode for å forberede posttittelen. Til slutt bruker viassertEquals
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 undertester / Feature
katalog.$ php artisan make: test AccessorTestDet 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 avassertSeeText
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.
$ PHPUnitDet 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!