laravel, bdd og dig. lad os komme i gang

, laravel, bdd og dig. lad os komme i gang,,,,, 214,,,,,,,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss. denne post er en del af en serie kaldet laravel, bdd og dig. laravel, bdd og du: det første element, velkommen til denne serie om udvikling af laravel ansøgninger ved hjælp af en opførsel drevet udvikling (bdd) tilgang.fuld stak bdd kan forekomme kompliceret og skræmmende.der er lige så mange måder at gøre det på, som der er udviklere.  , i denne serie, jeg vil følge dig gennem min tilgang med anvendelse af behat og phpspec til udformning af en laravel anvendelse fra bunden.,,, der er mange ressourcer på bdd generelt, men laravel specifikt materiale er svær at finde.derfor, i denne serie vil vi fokusere mere på laravel aspekter og mindre på de generelle ting, som man kan læse om mange andre steder,.,,, der beskriver opførsel, når de beskriver opførsel, der også er kendt som at skrive historier og specifikationer, vi vil anvende en ekstern strategi.det betyder, at hver gang vi bygger et nyt element, vil vi begynde med at skrive den generelle bruger historie.dette er normalt fra kunder eller interessenter perspektiv.  , hvad venter vi til at ske, når vi gør det? , er vi ikke lov at skrive en kode, indtil vi har en mangel, rød skridt, f.eks. medmindre vi er refactoring eksisterende kodeks.  , undertiden vil det være nødvendigt at iteratively løse en lille del af en historie eller objekt (to ord, som jeg bruger i flæng), som vi arbejder på.dette vil ofte skriftlige specifikationer med phpspec.det vil tage mange iterationer på en integration eller enhed, før hele historien om et godkendelsesniveau) er død.det lyder meget kompliceret, men det er virkelig ikke.jeg er en stor tilhænger af at lære af det, så jeg tror, at alt vil give mening, når vi begynder at skrive nogle konkrete kode.,, vi vil skrive historier og briller på fire forskellige niveauer:,, 1.accept, det meste af tiden, vores funktionelle suite vil tjene som vores accept lag.den måde, hvorpå vi vil beskrive vores forhold i vores funktionelle suite vil være meget tæt på, hvordan vi vil skrive historier (ved hjælp af en automatisk accept browser ramme) og som sådan skaber en masse dobbeltarbejde.  , så længe de historier, beskrive den adfærd fra kundens synspunkt, de tjener som accept historier.vi vil bruge den symfony domcrawler til test af produktionen af vores anmodning.senere i serien, finder vi, at vi er nødt til at prøve gennem et virkeligt browser, der kan køre javascript så godt.prøvning ved browser tilføjer nogle nye bekymringer, da vi er nødt til at sikre, at vi last time testmiljøet, når den suite er løb., 2.funktionelle, i vores funktionelle suite, vi får adgang til laravel anvendelse, hvilket er meget belejligt.for det første gør det let at skelne mellem miljøer.for det andet, ikke gennem en browser, gør vores test suite meget hurtigere.når vi ønsker at gennemføre et nyt element, vi skriver en historie i vores funktionelle suite med behat., 3.integration, vores integration suite vil teste opførsel i den centrale del af vores ansøgning, der ikke neccessarily skal have adgang til laravel.integrationen suite vil normalt være en blanding af behat historier og phpspec specs.,, 4.enhed, vores enhed prøver vil blive skrevet i phpspec og teste isoleret små enheder af ansøgningen kerne.vores enheder, værdi genstande osv. alle vil have briller.,,,, i hele denne serie, fra den næste artikel, vil vi bygge et system til sporing.vi begynder med en beskrivelse af den opførsel udefra ved at skrive behat karakteristika.den interne opførsel af vores ansøgning vil blive beskrevet ved hjælp af phpspec.  , og disse to redskaber vil hjælpe os, føler sig godt tilpas med kvaliteten af gennemførelsen, vi er ved at opbygge.vi skal først og fremmest skrive egenskaber og specifikationer på tre niveauer:  , funktionelle, integration, enhed, i vores funktionelle suite, vi vil kravle http svar på vores ansøgning i en hovedløs tilstand, hvilket betyder, at vi ikke vil gå igennem browseren.dette vil gøre det lettere at interagere med laravel og gøre vores funktionelle suite tjene som vores accept lag, så godt.  , senere, hvis vi ender med en mere kompliceret - og måske nødt til at teste nogle javascript så godt, vi kunne tilføje en særlig godkendelse suite.denne serie er stadig i gang, så kig forbi deres forslag i kommentarside.,, vores fælde, og konstaterer, at denne forelæsning, formoder jeg, at du har en ny installation af laravel (4.2) op og køre.- du bruger laravel homestead, hvilket er, hvad jeg brugte, da jeg skrev denne kodeks.,, før vi går i gang med noget arbejde, så lad os sikre, at vi har behat og phpspec op og køre.først vil jeg gerne gøre lidt rent, når jeg starter en ny laravel projekt og fjerne de ting, jeg ikke har brug for, så rm - r app /test /phpunit.xml bidrage. md,, hvis du slette de filer, sørg for at ajourføre deres  , komponist. json,   fil i overensstemmelse hermed.:, "autoload": {"classmap" ["app /ordrer", "app /controller", "app /modeller", "app /database /migration", "app /database /frø"]},,, og naturligvis:,, $komponist hul autoload,, nu er vi klar til at trække i den bdd redskaber, vi har brug for.lige en   kræver dev,   afsnit til din  , komponist. json:, "skal": {"laravel /ramme": "4.2. * *}" kræver dev ": {" behat /behat ":" ~ 0 "," phpspec /phpspec ":" ~ 2, 0 "," phpunit /phpunit ":" ~ 4.1 "},,," hvorfor er vi trækker i phpunit? "du kan tænke på?vi kommer ikke til at skrive gode, gamle phpunit prøvesager i denne serie, men de påstande, som er et praktisk redskab sammen med behat.vi vil se, at senere i denne artikel, når vi skriver vores første spillefilm.,, husk at opdatere dig afhængighed efter ændring af  , komponist. json:,, $komponist opdatering, dev, er vi næsten færdig installation og oprettelse af ting.phpspec arbejder ud af æsken:,, $sælger /bin /phpspec løb 0 specs 0 eksempler 0ms,, men behat skal gøre en hurtig tur med  , - lokalitet,   mulighed for at sætte det hele op:,, $sælger /bin /behat - lokalitet + d karakteristika - din *. træk filer her + d elementer /bootstrap - din forbindelse klasser her + f elementer /bootstrap /featurecontext.php - din definitioner, omdannelse og kroge her $sælger /bin /behat ingen scenarier, ingen skridt 0m0.14s (12.18mb), den første kommando har skabt et nyt  , featurecontext,   klasse, hvor vi kan skriv det skridt, definitioner, der er nødvendig for vores forhold:,, <?folkesundhedsprogrammet aspektet anvendelse behat. behat. forbindelse. snippetacceptingcontext; anvendelse behat. gherkin. node. pystringnode; anvendelse behat. gherkin. node. tablenode; /* * * behat forbindelse klasse.* /klasse featurecontext gennemfører snippetacceptingcontext {/* * * initializes sammenhæng.* * hvert scenarie får sin egen sammenhæng objekt.du kan også give vilkårlige argumenter forbindelse konstruktøren gennem behat.yml.* /offentlige funktion __construct() {}}, skrive vores første spillefilm, vores første element vil være meget enkelt: vil vi blot sørge for, at vores nye laravel installere hilser os med "du er ankommet." på hjemmesiden.jeg lagde en fjollet  , i betragtning af,   skridt, som  , eftersom jeg er logget ind, som kun tjener til at vise, hvor let kontakt med laravel i vores forhold er, teknisk set, jeg vil beskrive dette element, som funktionelle test, da det interagerer med rammerne, men det fungerer også som en godkendelsesprøvning, for vi vil ikke se nogen andre resultater fra en lignende test gennem en browser afprøvning værktøj.nu vil vi holde os til vores funktionstest suite.,, gå videre og skabe en   velkommen. træk,   fil og sætte det i  , træk /funktionel:,,&#elementer /funktionelle /welcome.feature træk: velkomst entreprenør som en laravel udvikler for at proberly begynde et nyt projekt, jeg har brug for at vurderes efter ankomsten scenario: hilsen fremkaldervæske på hjemmeside på jeg er logget ind, da jeg besøgte "/" så vil jeg se "du er ankommet.", ved at lægge de funktionelle elementer i en  , funktionelle,   fortegnelse, vil det være lettere for os at forvalte vores suiter senere.vi ønsker ikke integration type elementer, der ikke kræver laravel, at vente til den langsomme funktionelle suite.  ,, jeg kan lide at holde det pænt og rent, så jeg mener, at vi bør have et særligt træk baggrunden for vores funktionelle suite, som kan give os adgang til laravel.du kan bare gå videre og kopiere eksisterende  , featurecontext,   fil og skifte navn til   klasse, laravelfeaturecontext,.for dette arbejde, og vi har også brug for et  , behat. yml,   konfiguration fil.  , skabe en i roden adresseregister for det projekt, og tilføje følgende:,, default: suiter: funktionelle: veje: [% veje. base% /elementer /funktionelle] sammenhænge: [laravelfeaturecontext], jeg tror, det yaml her er temmelig selvforklarende.vores funktionelle suite vil finde elementer i  , funktionelle,   fortegnelse og løbe dem igennem  , laravelfeaturecontext,.,, hvis vi forsøger at stikke af behat på dette punkt, det vil sige at gennemføre de nødvendige skridt definitioner.vi kan få behat tilføje de tomme stillads metoder til  , laravelfeaturecontext,   med følgende kommando:,, $sælger /bin /behat... tør løbe - både stumper $sælger /bin /behat træk: velkomst entreprenør som en laravel udvikler for at proberly begynde et nyt projekt, jeg har brug for at blive mødt med arival scenario: hilsen fremkaldervæske på hjemmeside&#elementer /funktionelle /velkommen. eksempel: 6, da jeg er logget ind&#laravelfeaturecontext: iamloggedin() todo: skrive indtil definition, da jeg besøgte "/"&#laravelfeaturecontext: ivisit() så vil jeg se, du er her. "# laravelfeaturecontext: ishouldsee() 1 scenario (1 indtil) 3 trin (1 indtil 2 sprang) 0m0.28s (12.53mb), og nu, som du kan se fra den produktion, vi er klar til at begynde at gennemføre den første af vores foranstaltninger:  , eftersom jeg er logget ind,.,, phpunit test, at skibe med laravel giver os mulighed for at gøre ting som   $- > ($bruger), som tømmer i en given bruger.i sidste ende vil vi være i stand til at interagere med laravel, som hvis vi brugte phpunit, så lad os gå videre og skrive skridt definition kode "vi ville ønske, at vi havde": /* * * @ da jeg er logget ind * /offentlige funktion iamloggedin() {$bruger = ny bruger $- > ($bruger);}, vil dette ikke arbejde, selvfølgelig, da behat har ingen idé om laravel specifikke ting, men jeg vil vise dig i et øjeblik, hvor let det er at få behat og laravel lege pænt sammen.,, hvis du tager et kig på laravel kilde og finde den  , oplyse det institut. test. testcase,   klasse, som er den klasse, der ikke prøve går ud fra, du vil se det fra laravel 4.2, alt er blevet flyttet til et træk.den  , applicationtrait,   nu er ansvarlig for at sparke en  , anvendelse,   instans, oprettelse af en http klient og give os et par hjælper metoder, f.eks.  , be(),.  , det er ret sejt, hovedsagelig fordi det betyder, at vi bare kan trække det i vores behat sammenhænge med næsten en fælde, der kræves.vi har også adgang til  , assertionstrait,, men det er stadig bundet til phpunit.,, når vi trækker i træk, er vi nødt til at gøre to ting.vi er nødt til at have en  , setup(),   metode, som den i, oplyse. institut. test. testcase,   klasse, og vi har brug for en  , createapplication(),   metode, som den i misligholdelse laravel test.faktisk kan vi bare kopiere de to metoder og anvende dem direkte.  , er der kun én ting at bemærke: i phpunit, den metode,  , setup(),   automatisk vil blive kaldt før hver prøvning.for at opnå det samme i behat, vi kan bruge  , @ beforescenario,   anmærkning.,, tilføjes følgende til din  , laravelfeaturecontext:,, belyse. institut. test. applicationtrait; /* * * behat forbindelse klasse.* /klasse laravelfeaturecontext gennemfører snippetacceptingcontext {/* * *, der er ansvarlige for at levere en laravel app instans.* /anvendelse applicationtrait; /* * * initializes sammenhæng.* * hvert scenarie får sin egen sammenhæng objekt.du kan også give vilkårlige argumenter forbindelse konstruktøren gennem behat.yml.* /offentlige funktion __construct() {} /* * * @ beforescenario * /offentlige funktion setup() (hvis (!$- > app) ($- > refreshapplication();) /* * * skaber anvendelsen.* * @ tilbage. symfony. komponent. httpkernel. httpkernelinterface * /offentlige funktion createapplication() ($unittesting = sandt. $testenvironment = "test" tilbagevenden kræver __dir__. "/.. /.. /bootstrap /start. folkesundhedsprogrammet"}, ret let, og se, hvad vi får, når vi løber behat:, - sælger /bin /behat træk: velkomst entreprenør som en laravel udvikler for at proberly begynde et nyt projekt, jeg har brug for at blive mødt med arival scenario: hilsen fremkaldervæske på hjemmeside&#elementer /funktionelle /velkommen. eksempel: 6, da jeg er logget ind&#laravelfeaturecontext: iamloggedin(), da jeg besøgte "/"&#laravelfeaturecontext:: ivisit() todo: wrså vil jeg se ite indtil definition, "du er ankommet."&#laravelfeaturecontext: ishouldsee() 1 scenario (1 indtil 3 foranstaltninger (1 bestået, 1 indtil 1 sprang) 0m0.73s (17.92mb), en grøn første skridt, hvilket betyder, at vores fælde arbejder!, næste, vi kan gennemføre  , når jeg besøger,   skridt.det her er super nem, og at vi bare kan bruge  , call(), metode, at  , applicationtrait,   giver.en linje kode vil få os dertil: /* * * @, når jeg besøger: uri * /offentlige funktion ivisit ($uri) ($- > indkaldelse ('get, $uri)}, det sidste skridt,  , så skal jeg se, tager lidt mere, og vi er nødt til at trække på to områder.vi får brug for phpunit påstanden, og vi har brug for den symfony domcrawler efter "du er ankommet." tekst.,, kan vi gennemføre det sådan:,, anvendelse phpunit_framework_assert som phpunit; anvendelse symfony. komponent. domcrawler. larve./* * * @ så vil jeg se: tekst * /offentlige funktion ishouldsee ($tekst) {$larve = nye larve ($- > klient - > getresponse() - > getcontent()); phpunit: assertcount (1 $larve - > filterxpath ("////////text() [.= ($tekst)] ")},, det er stort set det samme kode som du ville skrive, hvis du brugte phpunit.den  , filterxpath(),   del er lidt forvirrende, og vi vil ikke tænke på det nu, da det er lidt uden for anvendelsesområdet for denne artikel.bare stol på mig, det virker. behat, løber en sidste gang er gode nyheder, $sælger /bin /behat træk: velkomst entreprenør som en laravel udvikler for at proberly begynde et nyt projekt, jeg har brug for at blive mødt med arival scenario: hilsen fremkaldervæske på hjemmeside&#elementer /funktionelle /velkommen. eksempel: da jeg er logget på 6&#laravelfeaturecontext: iamloggedin(), da jeg besøgte "/"&#laravelfeaturecontext: ivisit() så vil jeg se, du er her. "# laravelfeaturecontext: ishouldsee() 1 scenario (1 bestået) 3 trin (3 vedtaget) 0m0.82s (19.46mb), træk fungerer som forventet, og entreprenøren er mødt ved ankomsten.,, konklusion, den fuldstændige  , laravelfeaturecontext,   bør nu ligner det:,, <?folkesundhedsprogrammet aspektet anvendelse behat. behat. forbindelse. snippetacceptingcontext; anvendelse behat. gherkin. node. pystringnode; anvendelse behat. gherkin. node. tablenode; anvendelse phpunit_framework_assert som phpunit; anvendelse symfony. komponent. domcrawler. larve; brug belyse. institut. test. applicationtrait; /* * * behat forbindelse klasse.* /klasse laravelfeaturecontext gennemfører snippetacceptingcontext {/* * *, der er ansvarlige for at levere en laravel app instans.* /anvendelse applicationtrait; /* * * initializes sammenhæng.* * hvert scenarie får sin egen sammenhæng objekt.du kan også give vilkårlige argumenter forbindelse konstruktøren gennem behat.yml.* /offentlige funktion __construct() {} /* * * @ beforescenario * /offentlige funktion setup() (hvis (!$- > app) ($- > refreshapplication();) /* * * skaber anvendelsen.* * @ tilbage. symfony. komponent. httpkernel. httpkernelinterface * /offentlige funktion createapplication() ($unittesting = sandt. $testenvironment = "test" tilbagevenden kræver __dir__. "/.. /.. /bootstrap /start. folkesundhedsprogrammet"} /* * * @ da jeg er logget ind i offentligheden iamloggedin() {* /$bruger = ny bruger $- > ($bruger);} /* * * @, når jeg besøger: uri * /offentlige funktion ivisit ($uri) ($- > indkaldelse ('get, $uri)} /* * * @ så vil jeg se: tekst * /offentlige funktion ishouldsee ($tekst) {$larve = nye larve ($- > klient - > getresponse() - > getcontent());phpunit: assertcount (1 $larve - > filterxpath ("//text() [.= ($tekst)] ")), har vi nu et godt fundament at bygge på, som vi fortsat udvikle vores nye laravel anvendelse ved hjælp af bdd.jeg håber, at jeg har vist dig, hvor let det er at få laravel og behat lege pænt sammen.  , vi har været inde på mange forskellige emner i den første artikel.ingen grund til bekymring, vi vil indtage en mere indgående med alt det, som den serie fortsætter.  , hvis du har spørgsmål eller forslag, læg en kommentar.



Previous:
Next Page: