Hjem » Siste artikler » Effektiv frontend-testing med Cypress: slik får du raske, stabile tester i ekte prosjekter

Effektiv frontend-testing med Cypress: slik får du raske, stabile tester i ekte prosjekter

Hovedillustrasjon
Hovedillustrasjon. Foto: Goran Ivos / Unsplash.

Frontend-testing høres ofte fint ut på papiret, men i praksis ender mange med noen få skjøre end-to-end-tester som stadig ryker i CI. Cypress har blitt et populært verktøy nettopp fordi det gjør denne delen av arbeidet mer håndterlig.

I denne artikkelen ser vi på hvordan Cypress faktisk kan brukes i et vanlig webprosjekt: oppsett, mappestruktur, nyttige mønstre, feil som går igjen og en enkel arbeidsflyt som lar deg skrive tester uten å bremse utviklingen.

Hva er Cypress og når gir det mening å bruke det?

Cypress er et testverktøy som kjører direkte i nettleseren du allerede utvikler for. Det betyr at du ser det samme som sluttbrukeren, og kan teste hele reisen i et grafisk grensesnitt eller i headless-modus i CI.

Verktøyet passer best når du har et webgrensesnitt med interaksjon: skjemaer, filtrering, tabeller, navigasjon, API-kall og tilstander i UI. For enkle statiske sider kan det være overkill, men for moderne apper gir det rask tilbakemelding på om kritiske brukerflyter fortsatt fungerer.

Grunnoppsett i et eksisterende prosjekt

I et typisk JavaScript- eller TypeScript-prosjekt installerer du Cypress via pakkebehandleren du allerede bruker. Siden versjoner og kommandoflagg kan endre seg, er det lurt å sjekke den offisielle dokumentasjonen for detaljene før du starter.

Når Cypress først er installert, opprettes det som regel en egen mappe for tester og støttefiler. En enkel struktur som ofte fungerer fint, er å skille mellom ende-til-ende-tester og komponent- eller integrasjonstester for å holde oversikten god.

Enkel første test: test innlogging uten magi

En klassisk start er å teste en innloggingsside. Tanken er å gjenskape det du faktisk gjør manuelt: åpne siden, fylle inn feltene, trykke på knappen og sjekke at du havner på rett sted.

Et første skript kan for eksempel gjøre dette: navigere til /login, finne e-post- og passordfelt etter data-attributter, skrive inn testverdier, trykke på en innloggingsknapp og deretter sjekke at en gitt tekst eller URL finnes etterpå. Poenget er å speile virkeligheten, ikke å imponere med avansert syntaks.

Stabile selektorer: slutt å teste mot ren CSS

En av de vanligste årsakene til flakende Cypress-tester er at de bruker CSS-klasser eller tekstinnhold som selektorer. Så snart designet justeres, ryker testen, selv om funksjonaliteten egentlig fungerer fint.

Et godt grep er å innføre egne data-attributter, for eksempel data-cy eller data-test, på elementer som skal testes. Da kan du endre CSS fritt uten å måtte oppdatere testene hele tiden. Dette er et enkelt tiltak som raskt sparer mange irritasjoner.

Testdata og miljø: unngå avhengighet til manuelle steg

Cypress-tester blir raskt skjøre hvis de er avhengige av at noen først har opprettet brukere eller fylt inn data manuelt i testmiljøet. Plutselig feiler alt fordi databasen er tømt eller noen har ryddet opp.

En mer robust tilnærming er å la testene sette opp sine egne forutsetninger, for eksempel gjennom API-kall før selve UI-testen starter. Alternativt kan du ha egne skript som kjører før testkjøringen og sikrer definert starttilstand. Det viktigste er at testene kan kjøres fra blanke ark uten manuell innsats.

Mocke API-kall eller treffe ekte backend?

Tematisk illustrasjon
Tematisk illustrasjon. Foto: Daniil Komov / Pexels.

Et sentralt valg i Cypress-oppsett er om du vil teste mot ekte backend eller simulere API-svar. Begge tilnærmingene har fordeler og ulemper, og ofte er en kombinasjon mest hensiktsmessig.

Ekte backend gir god trygghet på at både frontend og backend spiller sammen, men introduserer også flere feilkilder. Mocket API gir mer forutsigbare og raske tester, men sier mindre om hele kjeden. En praktisk tilnærming er å ha et mindre sett kritiske scenarioer mot ekte backend, og et større sett raske tester med mockede svar.

Struktur for lesbare og gjenbrukbare tester

Etter noen uker får de fleste Cypress-oppsett samme utfordring: testenavn og filer vokser, og det blir vanskelig å se hva som egentlig dekkes. Litt struktur fra starten gir stor gevinst senere.

Et mønster som fungerer godt, er å organisere etter domene eller funksjonsområde, for eksempel login, orders og admin. I tillegg kan du dele ut felles funksjoner, som innlogging og navigasjon, til egne hjelpefiler som kan gjenbrukes på tvers uten at hver test må gjenta alt.

Cypress i CI: rask tilbakemelding uten å bremse pipeline

Det er først når Cypress kjører automatisk i CI at du virkelig får verdi ut av verktøyet. Oppsettet vil variere etter om du bruker GitHub Actions, GitLab CI eller andre løsninger, så det lønner seg å følge oppdatert dokumentasjon for spesifikk syntaks.

En enkel strategi er å skille raske tester som kjører på hver endring, fra tyngre kjøringer som reserveres for main-branch eller nattlige jobber. Da får du tidlig varsel på kritiske feil, uten at hver liten endring må vente lenge på hele testpakken.

Typiske feil og hvordan du unngår dem

Noen problemer dukker opp igjen og igjen i Cypress-prosjekter: for raske antakelser om at elementer er klare, tester som avhenger av tilfeldig timing, og opprydding som ikke skjer mellom kjøringer. Mye av dette kan unngås med gode vaner.

Et par enkle ting hjelper langt: bruk Cypress sine innebygde ventemekanismer i stedet for manuelle timeouts, sørg for at testene er uavhengige av hverandre, og hold antallet end-to-end-scenarioer nede slik at hvert av dem tester noe viktig og tydelig.

En enkel arbeidsflyt som faktisk brukes i daglig arbeid

For at Cypress ikke skal bli et sideprosjekt som aldri prioriteres, lønner det seg å koble det tett på utviklingsoppgavene du allerede gjør. En enkel tommelfingerregel er at hver viktig feil du retter, bør få en test som sikrer at den ikke kommer tilbake.

I praksis betyr det å gjenbruke den samme kjøringen du uansett har i nettleseren: først reproduserer du en feil manuelt, så oversetter du stegene til en Cypress-test, og lar den kjøre videre i bakgrunnen mens du jobber. Slik bygger du gradvis et nett av tester som faktisk gjenspeiler reelle problemer du har hatt.

Veien videre: start smått, men invester jevnt

Cypress belønner kontinuerlig innsats mer enn store løft et par ganger i året. Du trenger ikke skrive full testdekning på en uke, men du kommer langt med å legge til et par nye tester hver sprint som beskytter mot feil du vet har oppstått.

Når du har de første scenariene på plass, er neste steg å rydde litt i struktur, få testene inn i CI, og sørge for at teamet faktisk følger med på resultatene. Da blir Cypress et reelt arbeidsverktøy, ikke bare noe som kjører i bakgrunnen uten eierskap.

0 kommentarer