Hopp til hovedinnhold

Jest 23: 🔥 Lynrask testing med glede

· 7 min å lese
Ricky Hanlon
Ricky Hanlon
Unofficial Beta Translation

This page was AI-translated by PageTurner (beta). Not officially endorsed by the project. Found an error? Report issue →

I dag gleder vi oss over å kunngjøre Jest 23 - vår største hovedutgivelse noensinne! Sammen med over 100 bidragsytere har vi levert en haug av funksjoner og feilrettinger. Takk til alle i fellesskapet for å hjelpe til med å gjøre JavaScript-testing til en glede.

Vi vil også ønske både Babel og webpack velkommen til Jest-fellesskapet! Etter å ha konvertert fra Mocha til Jest 23 Beta, reduserte webpack sin totale testtidsbruk 6 ganger - fra over 13 minutter til 2 minutter og 20 sekunder. #blazingmeansgood

Her er noen av høydepunktene og bruddendringene i Jest 23.

Se endringsloggen for fullstendig liste.

Interaktivt øyeblikksbilde-modus

Vi har lagt til en ny standardvalg i overvåkingsmenyen som vi kaller Interaktiv øyeblikksbilde-modus. Denne nye modusen lar deg gå gjennom hvert feilende øyeblikksbilde i hver feilende testsuite, vurdere de mislykkede øyeblikksbildene og velge å oppdatere eller hoppe over hvert enkelt individuelt.

Interaktiv øyeblikksbilde-modus i aksjon

Se dokumentasjonen for Interaktiv øyeblikksbilde-modus her.

Egenskapssamsvar for øyeblikksbilder

Objekter du tar øyeblikksbilder av inneholder ofte genererte verdier som datoer og ID-er. Jest lar deg nå sende egenskaper til øyeblikksbilde-samsvaret som spesifiserer datastrukturen i stedet for de eksakte verdiene. Disse egenskapssamsvarene blir deretter verifisert før samsvartstypen (i stedet for verdien) serialiseres, noe som gir deg konsistente øyeblikksbilde-resultater på tvers av testkjøringer.

Egenskapssamsvar for øyeblikksbilder

Se den oppdaterte dokumentasjonen for toMatchSnapshot eller veiledningen for egenskapssamsvar for mer informasjon.

Egendefinerte asynkrone samsvar

Vi støtter nå asynkrone samsvar med expect.extends! Asynkrone samsvar returnerer et Promise slik at du kan await på at samsvaret løses. Som eksempel:

Egendefinerte asynkrone samsvar i aksjon

Dokumentasjon tilgjengelig her.

Egendefinerte asynkrone samsvar

Asynkrone samsvar er et flott verktøy når du bare bryr deg om asynkron likhet. For eksempel når venstre side forventes å være et objekt med en delmengde av egenskaper på høyre side, i stedet for en eksakt match. Jest leverer en rekke asynkrone samsvar ut av boksen, og i denne utgivelsen introduserer vi egendefinerte asynkrone samsvar.

Egendefinerte asynkrone samsvar i aksjon

Jest Each

@mattphillipsio har donert jest-each-pakken til Jest Core (takk Matt!). jest-each er et bibliotek inspirert av mocha-each og Spock Data Tables som lar deg definere en tabell med testtilfeller, og deretter kjøre en test for hver rad med de angitte kolonneverdiene. Vi støtter både array-typer og malstrenger for alle varianter av describe og test. Dokumentasjon finnes her, og for de som ikke bruker Jest 23 ennå, publiserer vi fortsatt jest-each separat!

jest-each i aksjon

Kjempe stor takk til Prettier for at de fikset tabellformateringen så raskt (se Prettier 1.13)!

Nye matchere

Vi legger kun til matchere i kjernen hvis vi tror de vil være nyttige for et stort antall brukere i Jest-miljøet, og lar flertallet av matchere være til fellesskapet (se jest-extended). Noen matchere kvalifiserer seg til kjernen, og Jest 23 legger til:

  • nthCalledWith

  • toReturn

  • toReturnTimes

  • toReturnWith

  • lastReturnedWith

  • nthReturnedWith

  • toStrictEqual

Nye matchere i aksjon

Se oppdaterte expect-dokumenter her.

Feilsøking av hengende tester

Et vanlig problem vi ser i issuetracker er "Jest" som henger etter testkjøring. Dette skyldes vanligvis at applikasjonskode etterlater åpne håndteringer som hindrer Jest fra å avslutte. Tidligere har brukere brukt --forceExit som løsning (anbefales ikke).

For å hjelpe med feilsøking av disse problemene, oppdager vi nå når Jest ikke avslutter:

Oppdager hengende tester

Og vi tilbyr et nytt flagg --detectOpenHandles for å hjelpe med å finne åpne håndteringer:

Kjører detectOpenHandles

Se oppdaterte CLI-dokumenter her.

Plugins for Watch-modus

Vi har omskrevet hele systemet for Watch-modus for å tillate tilpasning med egne plugins. Watch Mode Plugins gjør det nå mulig å koble seg til Jest-hendelser og tilby egne menyalternativer i Watch Mode-menyen. Alle standard Watch Mode-spørsmål er implementert som plugins i dette systemet, og dokumentasjon for å lage dine egne er tilgjengelig her.

Med denne endringen kan vi nå også gjeninnføre typeahead-støtte som Watch Mode Plugin via jest-watch-typeahead!

Typeahead-plugin i aksjon

Se jest-watch-typeahead for dokumentasjon og installasjonsinstrukser. Kjempetakk til @rogeliog for det nye Watch Mode-plugin-systemet og jest-watch-typeahead-pluginet!

Brytende endringer

Som med hver større utgivelse gjør vi noen brytende endringer for å muliggjøre større fremtidige endringer og for å løfte testopplevelsen til et nytt nivå. Her er en liste over de største endringene du kan oppleve:

  • Krever testbeskrivelser og funksjoner: Vi feiler nå tester som ikke inkluderer både en funksjon og en beskrivelse.

  • Fjern udefinerte props fra React-snapshots: Mindre snapshots og korrekt React-atferd.

  • Fjerner utdaterte funksjoner: Vi fjernet mapCoverage siden det ikke lenger er nødvendig. I tillegg fjernet vi jest.genMockFunction og jest.genMockFn siden disse er identiske med jest.fn.

  • Legg til snapshot-navn i feilmeldinger: Vi la til snapshot-navnet (hvis oppgitt) i feilmeldingen for å gjøre det enklere å finne snapshots som feiler.

  • Erstatt mock-tidsstempler: Vi erstattet mock-tidsstempler med invocationCallOrder siden to eller flere mocks ofte kan ha samme tidsstempel, noe som gjør det umulig å teste kallrekkefølgen.

  • Legg til resultater i mock-snapshots: Vi la til mock-funksjonskallsresultater i snapshots slik at både kallene og utførelsesresultatene spores.

Andre forbedringer

  • Dekningsgrad i watch-modus: Dekningsgrad er nå begrenset til kun filer testet i watch-modus eller ved bruk av --onlyChanged og --findRelatedTests.

  • Versjonsdokumentasjon: Vi la til dokumentasjon for hver minneverdig utgivelse tilbake til Jest 22, og fjernet alle "Krever Jest X.X+" fra dokumentasjonen.

  • Bedre snapshot-sammendrag: Vi forbedret Snapshot Summary-utdata for å gjøre foreldede snapshots mer informative.

  • Bedre stack traces: Vi la til stack traces for asynkrone feil, timeout-feil, expect.assertions og kastede ikke-feil. Vi indikerer også kolonnen i koderammen!

  • Bedre React 16-støtte: Legger til snapshots-støtte for React.Fragment, React.forwardRef og React.createContext.

  • Spor retur- og kasteverdier for mocks: Legger til mock.results som inneholder returverdien eller kastet verdi for hvert mock-kall.

  • Blazing 🔥: Vi la til et blazing-merke i README-en for å indikere at Jest er blodbra.

Jest Summit

Forrige uke møttes Jest Core Team for Jest Summit hos Facebook London hvor vi jobbet med og lanserte Jest 23, kunngjorde Jest Open Collective, og holdt en rekke foredrag:

Hele foredraget er tilgjengelig her.

Oppslutningen var fantastisk, og vi fikk møte mange fra det London-baserte fellesskapet ansikt til ansikt. Takk til alle som deltok og for deres fortsatte støtte! Følg med i vårt neste innlegg der vi vil skissere Jest Open Collective og planene vi har for fremtiden.

Som alltid kunne ikke denne utgivelsen vært mulig uten dere, JavaScript-fellesskapet. Vi er utrolig takknemlige for at vi får muligheten til å jobbe med å forbedre JavaScript-testing sammen. Hvis du ønsker å bidra til Jest, ikke nøl med å kontakte oss på GitHub eller på Discord.