Introduksjon

I verden av testing av Next.js-applikasjoner, står utviklere ofte overfor dilemmaet med å velge mellom populære testverktøy som Cypress og Jest. Hos Daxap har vi nylig tatt beslutningen om å omfavne Cypress for våre testbehov, spesielt med introduksjonen av dens komponenttestingfunksjon. I dette blogginnlegget vil vi utforske grunnene bak dette valget og hvordan det har påvirket vår utviklingsprosess positivt.

  1. Rik Visualisering med Cypress

En av de fremtredende funksjonene til Cypress som overbeviste oss, var dens evne til å gi en omfattende visualisering av testsesjonen. I motsetning til Jest, lar Cypress utviklere se hele testprosessen utfolde seg i nettleseren. Denne synligheten viste seg å være uvurderlig for feilsøking og forståelse av hvordan våre komponenter oppfører seg i forskjellige scenarioer.

  1. Rask Oppsett og Hurtig Testing

Å sette opp et testmiljø kan være en omfattende prosess, spesielt når man håndterer Next.js-applikasjoner. Cypress fremsto som den klare vinneren når det gjelder hastighet og enkelhet. Med et brukervennlig visuelt grensesnitt var det enkelt å komme i gang med Cypress, noe som betydelig overgikk de manuelle konfigurasjonene som kreves av Jest for Next.js.

  1. Enkel Læring og Konsistent Syntaks

Læringskurven for Cypress var bemerkelsesverdig jevn, takket være dens lignende syntaks til Jest. Å utnytte kraften til GitHub Copilot akselererte vår kjennskap til Cypress, noe som gjorde overgangen sømløs. Den konsistente syntaksen mellom de to rammeverkene lettet opplæringsprosessen for vårt utviklingsteam.

  1. Håndtering av Testing med et UI: En Superb Opplevelse

En av de fremtredende funksjonene som bekreftet vårt valg av Cypress hos Daxap AS, er den enestående opplevelsen av å håndtere tester gjennom et grafisk brukergrensesnitt (UI). I motsetning til Jest, som hovedsakelig stoler på kommandolinjen for testutførelse og rapportering av resultater, tilbyr Cypress et intuitivt og visuelt rikt dashbord.

Visualisering av Testkjøringer

Cypress’s UI lar ikke bare utviklere se testprosessen i sanntid, men gir også detaljerte innsikter i hver testtilfelle. Det interaktive dashbordet viser testresultater, logger og tillater enkel navigasjon mellom forskjellige testpakker. Denne visuelle representasjonen forbedrer betydelig feilsøkingsprosessen, noe som gjør den raskere og mer effektiv.

  1. Utfordringer med Mocking i Cypress

Selv om Cypress utmerket seg på mange områder, støtte vi på utfordringer med mocking, spesielt når det gjaldt Next.js-spesifikke kroker som useRouter fra next/navigation. I motsetning til Jest, tilbyr ikke Cypress enkle løsninger for mocking, noe som krevde at vi måtte finne en omvei.

Mocking av Next.js Kroker i Cypress

For å illustrere utfordringene vi møtte, la oss vurdere en enkel Next.js-komponent som bruker useRouter:

Når man forsøker å gjengi denne siden med Cypress, fører følgende kode til en feil:

Feilen du kan støte på er noe som: ‘invariant expected app router to be mounted’. Dette skyldes at Cypress har problemer med å håndtere useRouter-kroken fra next/navigation under testing.

Løsningen

For å takle dette problemet, implementerte vi en løsning inspirert av diskusjoner i fellesskapet. Ved å endre komponentkoden vår, introduserte vi en tilpasset useRouter-egenskap i komponenten og mocket den under testing:

Denne løsningen tillot oss å overvinne utfordringene som Cypress presenterte i mocking av Next.js-spesifikke kroker, og ga en klar vei fremover for testing av komponenter som bruker useRouter i en Next.js-kontekst.

Konklusjon

Til slutt har vår beslutning om å velge Cypress over Jest for testing av Next.js-komponenter vist seg å være en klok en. Den rike visualiseringen, raske oppsettet og enkelheten i læringen har betydelig økt vår utviklingsflyt. Selv om det oppsto utfordringer med mocking, gjorde de innovative løsningene og omveiene Cypress til et generelt overlegent valg for våre testbehov.

Ettersom vi fortsetter å utforske og utnytte Cypress i våre prosjekter, ser vi frem til de kontinuerlige fremskrittene og forbedringene i testlandskapet for Next.js-applikasjoner.

Kilder

1. «ComponentTestingNext.jswithCypress»-CypressBlog
https://www.cypress.io/blog/2023/02/16/component-testing-next-js-with-cypress

2. Cypress-Testing»-Next.jsDocumentation
https://nextjs.org/docs/pages/building-your-application/optimizing/testing#cypress

Dette innlegget har skrevet av backend-utvikler, Oğuzhan K., i Daxap