En Introduksjon til Enhetstesting i JavaScript og Dens Rammeverk
Utviklingslandskapet for webapplikasjoner har opplevd en enorm utvikling de siste årene. Vi har sett en overgang fra tradisjonelle programmeringsspråk som Java, .NET og PHP til økt bruk av JavaScript-rammeverk. Dette skyldes i stor grad JavaScripts fleksibilitet, både i frontend- og backend-utvikling, samt muligheten for rask prototyping.
Denne utviklingen har medført et økt behov for gode testverktøy. I denne artikkelen skal vi se nærmere på noen av de ledende JavaScript-enhetstestverktøyene som brukes i bransjen i dag.
Hvorfor er Enhetstesting Viktig?
Før vi dykker ned i de ulike verktøyene og deres fordeler, la oss først forstå viktigheten av enhetstesting.
Enhetstesting er en prosess der man tester kode på modulnivå. Dette betyr at man sørger for at hver enkelt modul i applikasjonen oppfyller de spesifiserte kravene fra forretningsdokumentasjonen. Tester skrives for hver modul etter hvert som de utvikles. Etter at en ny modul er utviklet, kjøres hele testpakken for å forsikre seg om at den nye modulen ikke har påvirket eksisterende moduler negativt.
JavaScript-utvikling kan fort bli uoversiktlig uten de rette konvensjonene. Dette gjør det viktig å bruke de korrekte utviklings- og enhetstestverktøyene. Enhetstester for frontend i JavaScript kjøres som regel i faktiske eller hodeløse nettlesere.
Disse testene fokuserer på å undersøke brukervennlighet og respons i applikasjonen. Backend-enhetstestrammeverkene fokuserer på å teste forretningslogikk og tjenesteendepunkter for NodeJS-basert backend-kode.
MochaJS
MochaJS er et populært testrammeverk som støtter både backend- og frontendtesting. Det er en fleksibel base for å utvikle tester etter behov, og kjører testene asynkront i Chrome v8-motoren eller andre nettlesere.
De viktigste fordelene med MochaJS er:
- Fungerer for både frontend og backend.
- Har støtte for NodeJS debugger.
- Tilbyr en ren base for å utvikle tester i henhold til utviklerens behov.
- Støtter alle nettlesere, inkludert hodeløse nettlesere som Chrome.
- Støtter objektspotting for fleksible backend-tester.
Jasmine
Jasmine er et rammeverk som lar deg utføre testtilfeller som etterligner brukeratferd på nettsiden din. Jasmine er spesielt nyttig for å teste frontend for synlighet, klikkbarhet og responsivitet på ulike skjermstørrelser. Du kan automatisere brukeratferd med tilpassede forsinkelser og ventetider for å simulere virkelig brukeratferd.
De største fordelene ved å bruke Jasmine inkluderer:
- Lav overhead på grunn av nesten ingen eksterne avhengigheter.
- Leveres med nesten alle nødvendige verktøy «ut av boksen».
- Støtter både frontend- og backend-tester.
- Koden er skrevet på en måte som ligner naturlig språk.
- Omfattende dokumentasjon for bruk med flere rammeverk.
Sjekk ut dette nyttige nettkurset om enhetstesting med Jasmine.
AVA
AVA er et minimalistisk og lett testrammeverk som utnytter JavaScripts asynkrone natur. AVA kan utføre tester samtidig.
Det gir deg nesten full kontroll over hva du gjør og er primært fokusert på å kjøre tester for NodeJS-basert kode. Noen av fordelene inkluderer:
- Lett fotavtrykk som gjør det raskere.
- Kjører tester asynkront og samtidig.
- Raskere enn de fleste andre testrammeverk.
- Enklere syntaks for JavaScript-tester.
- Renere stabelsporing for potensielle feil som oppdages.
Jest
Jest er et av de mest populære rammeverkene og vedlikeholdes regelmessig av Facebook. Det er et foretrukket rammeverk for React-baserte applikasjoner, da det krever minimal konfigurasjon.
Det er imidlertid ikke begrenset til bruk med React. Noen av Jests funksjoner er:
- Et enkelt rammeverk som passer for NodeJS, VueJS, React, Angular og andre Babel-baserte prosjekter.
- Lett å komme i gang med.
- God dokumentasjon og standard syntaks for koding.
- Med Live snapshots kan det administrere tester med større objekter.
Karma
Karma er et produktivt testmiljø som støtter alle de populære testrammeverkene. Det gir applikasjonen din støtte for å utføre tester i ulike miljøer og har bred støtte for testing på ulike enheter og applikasjoner.
Hovedgrunnen til å velge Karma ligger i støtten for integrasjon med CI/CD-systemer og følgende funksjoner:
- Kan brukes til å kjøre tester i nettlesere, hodeløse miljøer som PhantomJS, og på enheter.
- Støtter tester skrevet i de fleste populære rammeverk.
- Muliggjør ekstern testing på andre enheter ved å laste inn filer.
- Støtter feilsøking av tester med Chrome og Webstorm.
Tape
Tape ligner AVA i sin arkitektur. Det støtter ikke globale variabler, så du må inkludere Tape i hver testfil. Denne beslutningen om å begrense globale variabler har sine fordeler. Noen av de viktigste funksjonene er:
- Rent og lett.
- Gir bare grunnleggende kode og gir utvikleren full frihet til å skrive testtilfeller.
- Støtter ES6, Typescript og kaffeskript standarder.
- Støtter testkjøring i de fleste moderne nettlesere.
Cypress.io
Cypress er et spennende testrammeverk som kjører direkte i nettleseren. Det gir et interaktivt brukergrensesnitt i nettleseren i form av en nettside. Det er enkelt å installere på Mac, Windows og Linux. Cypress er en uavhengig testrunner som ikke trenger å integreres tett med koden din.
Puppeteer
Puppeteer er et utmerket testutførelsesrammeverk utviklet av et team hos Google. Det tilbyr et hodeløst Chrome API for NodeJS-applikasjoner.
Puppeteer brukes hovedsakelig til nettleserspesifikke applikasjoner, som for eksempel end-to-end testing, testing av sidestruktur, ta skjermbilder og til og med fange forhåndsgjengitt innhold for Single Page Applications. Andre fordeler med å bruke Puppeteer er:
- Mulighet til å angi egendefinerte oppløsninger og størrelser for nettleseren.
- Støtte for å teste Chrome-utvidelser.
- Automatiseringsstøtte for skjema innsending, UI-testing og tastaturinndata.
- Støtter ES6-funksjoner som await og async.
ChaiJS
ChaiJS fokuserer på atferdsdrevet testing og kan brukes parallelt med andre rammeverk. Det har eksistert en stund og har utviklet seg i takt med utviklingen i JavaScript-standarder.
ChaiJS fungerer med Node, nettlesere og Rail og har god støtte fra fellesskapet og omfattende dokumentasjon.
Qunit
Qunit er et kraftig testrammeverk dedikert til bruk med frontend. Det er førstevalget for utviklerne av jQuery, jQuery Mobile og jQuery UI-bibliotekene.
Qunit kan skrives som en uavhengig JS-fil og kjøres på en hvilken som helst nettside. Standardmetoden for testing er å inkludere filen på nettsiden og kjøre tester med Qunit-plugin. Fordelene med QUnit inkluderer:
- Kan brukes til å bygge gjenbrukbare testskript.
- Gir et webgrensesnitt for visuell presentasjon av testresultater.
- En samling med plugins gjør testutvikling raskere.
Sinon
Sinon.js komplementerer rammeverkene for enhetstesting ved å simulere/mocke ekte objekter og funksjoner. Under testing vil man ikke alltid ha tilgang til alle ekte data, og Sinon hjelper med dette. Det støtter Chrome, IE 11, Firefox, Edge, Safari og Node.js runtimes.
Et godt alternativ til Sinon er testdouble.js
Konklusjon
Enhetstesting er viktig for å sikre at endringer i koden ikke bryter applikasjonen og at den fungerer i henhold til forretningskravene. Forhåpentligvis har denne artikkelen hjulpet deg med dette. Hvis du er nybegynner, kan du vurdere dette nettkurset, som lærer deg å utføre JS-enhetstesting med ChaiJS, Sinon og Mocha.