Jest 25: 🚀 Legger grunnstein for fremtiden
This page was AI-translated by PageTurner (beta). Not officially endorsed by the project. Found an error? Report issue →
Jest 25 legger grunnmuren for store endringer i fremtiden. Vi har holdt brytende endringer til et minimum, men interne arkitekturforandringer kan kreve oppmerksomhet under oppgraderingen. Hovedendringene inkluderer oppgradering av JSDOM fra v11 til v15, 10-15% raskere testkjøring, nytt diff-visning for utdaterte snapshots og slutten på Node 6-støtte.
Over 80 bidragsytere har lagt inn mer enn 200 endringer siden Jest 24.9. Sjekk endringsloggen for full oversikt.
Farvel Node 6
Node 6 nådde end-of-life 30. april 2019, og Jest 25 sier farvel. Dette frigjør oppgradering av avhengigheter, spesielt JSDOM opp til versjon 15. Oppgraderingen fjerner også behovet for å transpilere async-await-syntaks, noe som gir både raskere kjøring og mindre minnebruk. Som bonus blir Jest's transpilerte kode enklere å debugge.
Selv om Node 8 også er EOL, støtter Jest 25 det fortsatt for å lette oppgraderingen. Dette medfører kompromisser - JSDOM v16 støtter ikke Node 8, så du må bruke jest-environment-jsdom-sixteen for siste versjon.
Ytelsesforbedringer
Brukere rapporterte tregere ytelse i siste versjoner. Jest 25 inkluderer oppgradert Micromatch med stor hastighetsøkning ved oppstart, pluss feilrettinger som bringer Jest tilbake til Jest 23-nivå. Dette gir 10-15% kortere testkjøring for Jest selv. Vi fortsetter å jobbe med ytelse - rapporter gjerne problemer!
V8-dekningsgrad
Jests nåværende dekningsgradsinstrumentering bruker babel-plugin-istanbul, som er tregt og minnekrevende for store kodebaser. Heldigvis har V8 innebygd dekningsgradsstøtte som blir mer moden i Node takket være hardt arbeid fra Benjamin Coe og andre på V8- og Node.js-teamene. Jest 25 introduserer eksperimentell støtte via --coverage-provider-flagget. Se dokumentasjonen for detaljer.
Rask og langsom tenkning ved feilende tester
Unødvendig tolkningsarbeid ved testfeil hindrer:
-
"Rask tenkning": Gjenkjenning av mønstre fra tidligere erfaring
-
"Langsom tenkning": Analyse av endringer for å avgjøre om de er forventet eller uventet
Jest 25 fullfører forbedringer av alle matcherere som startet i Jest 24:
-
Korrekt beskrivelse inkludert
.rejects,.resolvesog.not -
Konsise etiketter og konsekvent justering av forventede og mottatte verdier
-
Invertert fremheving av strengforskjeller
-
Telling av endrede linjer for å skille sletting og innsetting
Spesiell takk til Jest-vedlikeholder Mark Pedrotti for sitt arbeid med feilmeldinger.
Farger ved snapshot-feil
Den mest synlige endringen for å erstatte forvirring med trygghet er fargene på endringslinjer ved snapshot-feil:
-
- Snapshotendres fra grønn til magenta -
+ Receivedendres fra rød til blågrønn tekst på cyan-bakgrunn
Eksempler på snapshot-rapporter (før til venstre, etter til høyre)
- Telling av endrede linjer bekrefter din første oppfatning av endringsretning (sletting eller innsetting)

- Bakgrunnsfarger hjelper øyet med å sammenligne tilstøtende endrede linjer

- Bakgrunnsfarger hjelper også med å identifisere
toThrow-tester som krever beslutning om snapshot-oppdatering

Grunnene for fargevalgene:
-
95% med full fargesyn gjenkjenner raskt snapshot-rapporter versus andre matchere
-
Løser konflikten mellom grønn/rød i Jest-tester versus kodegjennomgang
-
Forskjellig fra rød/grønn som antyder automatisk oppdatering, fremhever disse fargene behov for nøye vurdering
Fargeforskjellen fra magenta (300°) til blågrønn (180°) gir bedre tilgjengelighet, og lyse bakgrunner sikrer kontrast på både lyse og mørke temaer.
Kommandoverktøyutviklere kan finne inspirasjon til bedre tilgjengelighet i #9132.
Støtte for ECMAScript-moduler
Node 13 har ustablert ESM-støtte, og vi jobber med innføring i Jest. Jest 25 støtter jest.config.cjs og jest.config.mjs, men tester kan ikke skrives i ESM uten transformering (f.eks. via Babel/TypeScript).
Underliggende API-er er fortsatt eksperimentelle. Vi følger utviklingen fra Node.js Modules-teamet. Følg denne saken for oppdateringer.
Andre forbedringer
-
Jest har nå over 1000 bidragsytere. Utrolig milepæl! Takk til alle som gjør testing mer behagelig.
-
Takket være Josh Rosenstein støtter Jest nå
BigInti de fleste matchere somtoBeGreaterThan. -
--detect-leaks-funksjonen var ødelagt for Node 12+ - dette er fikset i Jest 25. -
Som annonsert for Jest 24, er Jest nå skrevet i TypeScript (fullført i Jest 24.3). Dette gir bedre IDE-integrasjon. Vi jobber med å forbedre typehåndtering for mocks - bidra gjerne her.
-
Pakken
jest-diffeksporterer nå funksjoner somdiffLinesUnifiedogdiffStringsUnifiedmed konfigurasjonsalternativer, slik at andre applikasjoner kan formatere forskjeller på tilpassede måter. For mer informasjon og kodeeksempler, se den nyeREADME.md-filen i Jest-gitdepotet eller på pakkearkiver. -
Takket være bidragsyteren Wei An Yen vil Jest ikke lenger markere godkjente asymmetriske matchere i feilmeldinger. Dette har vært et vedvarende irritasjonsmoment med asymmetriske matchere, og vi er glade for at det endelig er løst.
-
For andre år på rad vant Jest "Highest Satisfaction"-prisen fra State of JS. Vi er utrolig takknemlige for støtten fra fellesskapet og håper vi kan bygge på denne suksessen for å gjøre 2020 enda bedre!
Planer for fremtiden
-
Jest sin konfigurasjon er omfattende og noe klønete – det finnes ofte minst to måter å gjøre samme ting på, ofte enda flere. For Jest 26 håper vi å kondensere konfigurasjonen og gjøre den mer forutsigbar. Se denne saken for detaljer.
-
Vi håper også å kunne tilby et skikkelig programmatisk API for kjøring av Jest, for å gjøre integrasjon med IDE-er og andre verktøy enklere. Se denne følgesaken.
-
En PR for å legge til Lolex som implementasjon av Jest's falske timere har vært åpen siden desember 2017. Selv om vi ikke legger det til i noen offentlige API-er i Jest 25, er støtten teknisk sett inkludert, og vi ser på hvordan vi kan eksponere dette for at folk kan teste og eksperimentere. Bruk gjør at du kan mocke
Dateog andre tidsfunksjoner Jest for øyeblikket ikke håndterer. Merk at dette bør betraktes som eksperimentelt, og skikkelig API-støtte kommer i en senere utgivelse. Følg denne PR-en for siste oppdateringer.
Lykke til med testingen! 🃏
