Innholdsfortegnelse
I dag er en god tid å være utvikler på JavaScriptDet kan sies at det er enda spennende siden teknologiene som omfatter det har modnet ganske mye, nettlesere er mer standardiserte og hver dag dukker det opp flere nye ting å leke og eksperimentere med.JavaScript er et etablert språk og nettet er hovedplattformen i dag, hvor vi har sett fremveksten av enkeltsideapplikasjoner, spredningen av MVC -rammer som f.eks. AngularJS eller Backbone.js, ved hjelp av JavaScript på serversiden med Node.js og til og med mobilapplikasjoner som er opprettet utelukkende ved hjelp av HTML, CSS Y JavaScript med teknologier som PhoneGap.
Fra den ydmyke begynnelsen har JavaScript vært ansvarlig for å fungere som et språk for å manipulere dataene og validere dem i skjemaene i HTML og i dag brukes den til å bygge de kraftige applikasjonene vi kan se på nettet. Når man ser dette kan man si det JavaScript Det har kommet langt, i tillegg til verktøyene som har dukket opp for å sikre at vi har samme kvalitet som om vi var på andre språk.
Et av disse verktøyene er Jasmine, som ikke er mer enn et atferdsorientert utviklingsrammeverk, og som lar oss lage automatiserte enhetstester for programmeringsspråket JavaScript. Før vi går helt inn med dette verktøyet, la oss se bakgrunnen som førte til utviklingen, så vel som viktige begreper for å forstå hvordan det fungerer JavaScript.
I dag er det ingen som tviler på kraften til JavaScriptImidlertid er det komplikasjoner når vi jobber på klientsiden, og en av de åpenbare årsakene er at vi ikke kan kontrollere utførelsesmiljøet. På serveren har vi ikke dette problemet siden vi kan kjøre en spesifikk versjon av Node.js men når det gjelder nettleseren, kan vi ikke fortelle brukeren å bruke en bestemt versjon av Chrome eller Firefox.
Språket JavaScript er definert under spesifikasjonene ECMAScript slik at hver nettleser kan ha sin egen implementering av miljøet for å kjøre det, noe som fører til at det er små forskjeller eller feil mellom dem. Hvert objekt av JavaScript den er foranderlig, så vi har ikke noen form for kontroll for å forhindre at en modul overskriver deler av andre. For å illustrere dette, la oss se på et lite kodesegment hvor vi kan se hvor enkelt det er å overskrive den globale funksjonen console.log:
console.log ('test'); console.log = 'pause'; console.log ('test');La oss se svaret etter konsoll, hvor vi tydelig kan se feilen siden vi har overskrevet funksjonen:
Denne måten å være språket på var en beslutning som ble tatt i utformingen, siden det tillot utviklere å legge til manglende funksjonaliteter til det, men gitt denne allsidigheten er det relativt lettere å gjøre feil, selv en nyere versjon av språket introduserte funksjon Objekt. Segl som forhindret dette, men støtten utvidet seg bare til noen få nettlesere.
Et annet problem som vi presenterer med JavaScript er håndtering av typer, på andre språk vil et uttrykk som '1' + 1 sannsynligvis føre til en feil, men i JavaScript dette vil resultere i 11. Dette kan føre til noen problemer som er vanskelig å finne, for eksempel anta at vi har følgende:
var a = 1, b = '5', c = 4, d = 2; var resultat = a + b + c * d; console.log (resultat);La oss se svaret gjennom konsollen når vi kjører koden vår i nettleseren:
Som vi kan se, var resultatet en streng, så hvis vi ventet et tall i en spesiell funksjon eller rutine, kan dette forårsake et problem, og å finne denne feilen kan bety å kaste bort noen timer av vår dyrebare utviklingstid.
Det er viktig å nevne at punktene vi nettopp har nevnt ikke er en grunn til ikke å bruke JavaScriptDet er ganske enkelt å se hvor det har noen svakheter, men dette betyr ikke at det er et dårlig språk, vi kan til og med forsikre om at mulighetene det gir oss er uendelige når det gjelder applikasjonsutvikling og hva som er bedre, vi har fortsatt verktøy som vi de vil hjelpe med beste praksis av det samme.
Som vi nevnte, Jasmine Det er et lite rammeverk som hjelper oss med våre enhetstester innenfor vår utvikling og som bruker filosofien om atferdsorientert utvikling som vi vil forklare senere, men før vi fortsetter, la oss se et viktig konsept, og det er at de er enhetstester.
EnhetstesterDe enhetstester De er kodebiter som tester funksjonaliteten til enhetene i koden til applikasjonen vår, som i begynnelsen av denne veien utvikleren satt igjen med en tradisjonell filosofi som fokuserte på testorientert utvikling i stedet for atferdsorientert.
Det er derfor skaperne av Jasmine de omstrukturerer denne tradisjonelle måten å teste på, hvor utvikleren sto uten et klart bilde av hvor de skulle begynne i testprosessen, uten å vite hva de skulle teste og hvor stor en testmodul kan være eller til og med hva de vil kalle en av disse testene . For eksempel hvis vi bruker filosofien om Jasmine For å utføre testene, anta at vi har en musikkspiller som vil ha følgende akseptkriterier: Gitt spilleren, når en sang er satt på pause, må spilleren indikere at sangen var satt på pause.
Så vi kan ta kriteriet og dele det slik:
- Gitt (en innledende kontekst)
- Når (hendelsen skjer)
- Deretter (en handling blir utført)
beskrive ("Spiller", funksjon () {beskrive ("Når sangen er satt på pause", funksjon () {den ("Den må indikere at sangen er satt på pause", funksjon () {});});});Som vi kan se ble våre kriterier overført til Jasmine uten store problemer, hvor vi kan si at hvert kriterium er oversatt til en enhetstest.
Vi kunne allerede ta en titt på hvordan Jasmine den håndterer kriteriene og oversetter dem til syntaksen ved å lage enhetstestene for den, men for å komme dit, la oss først se hvordan vi får rammeverket først. For å gjøre dette, går vi til projektsiden og laster den ned:
FORSTØRRE
Når vi pakker den ut må vi gå til mappen dist, der vil vi finne alle distribusjoner av Jasmine til dags dato, hvor vi skal begynne å bruke den, må vi velge distribusjonen vi vil ha, helst den siste og pakke den ut i mappen til prosjektet vårt, gå inn i mappen og kjøre filen SpecRunner.html:Jasmine Den inneholder som standard noen eksempler på noen enhetstester, der filen SpecRunner.html har ansvaret for å koble Jasmine -koden som inkluderer kildefilene og filene for testing, la oss se innholdet:
Jasmine Spec Runner v2.2.0Som vi kan se, er det ganske enkelt og lar oss definere en grunnstruktur for testene våre, og gir oss en hjelp om hvor du skal begynne i denne verdenen av enhetstester. Det sier seg selv at det er en god idé å ta en titt på koden for vår distribusjon av Jasmine for å gjøre oss kjent med hvordan det fungerer.
Det er viktig å nevne det Jasmine ikke bare begrenset til kode skrevet med ren JavaScript, vi kan teste programmene som er bygd med Backbone.js eller AngularJS, til og med allsidigheten går mye lenger og lar oss utføre tester på serversiden i tilfelle vi bruker Node.js.
AnbefalingJasmine Det er et rammeverk som hjelper oss mye i forbindelse med enhetstester, men konseptene som brukes i det er ikke så enkle, det støttes av visse avanserte metoder for JavaScript for eksempel å generere HTML ved hjelp av funksjonen createDom () å sette inn elementene i den, for å nevne noen av disse egenskapene, så vi anbefaler å ta en tur gjennom dokumentasjonen av JavaScript å være mye mer forberedt på fremtidige opplæringsprogrammer.
Med dette fullførte vi denne opplæringen, der vi kunne ta de første trinnene våre Jasmine, gå litt gjennom motivasjonen for å lage verktøy å teste på JavaScript og hvordan atferdsrettet utvikling hjelper oss med å lage bedre tester, også se hvordan Jasmine er et ganske fleksibelt rammeverk for testing, slik at vi kan bruke samme forekomst til å teste alle typer kode inn JavaScript i våre applikasjoner.