Jest 24: 💅 Forfriskende, polert og TypeScript-vennlig
This page was AI-translated by PageTurner (beta). Not officially endorsed by the project. Found an error? Report issue →
I dag er vi glade for å kunngjøre neste større utgivelse av Jest - versjon 24! Det har gått 4 måneder siden siste mindre utgivelse, og 8 måneder siden Jest 23, så denne oppgraderingen er en stor en med noe for alle! Høydepunkter innebygd støtte for TypeScript ved å oppgradere Jests interne systemer til Babel 7, fiksing av langvarige problemer med manglende konsollutdata og ytelsesproblemer ved beregning av store diff-er, samt en helt ny glitrende nettside. ✨
Se endringsloggen for fullstendig liste over alle endringer.
Ny nettside
@orta har levert et vakkert redesign av Jests nettside, implementert av fellesskapsmedlemmene @montogeek og @brainkim.
Målet med redesignet var å fremheve mer av det som gjør Jest fantastisk, og å bryte opp forestillingen om at Jest først og fremst er et verktøy for testing av React-apper - du kan bruke Jest med alle slags prosjekter, og vi vil gjøre dette tydelig. Du kan lese mer om ideene bak redesignet i denne saken.
TypeScript-støtte
Vi har oppgradert internt til Babel 7 i Jest 24, som kommer med støtte for TypeScript-prosjekter. Det betyr at Jest kan støtte transpilering av TypeScript ut av boksen, så lenge du konfigurerer Babel til å bruke @babel/preset-typescript. En begrensning ved standard TypeScript-støtte, likt som med Flow, er at Babel kun vil fjerne typeannoteringer for å gjøre koden din til gyldig JavaScript. Den vil ikke sjekke typene i koden din.
Selv om Jest har støttet Babel 7 siden versjon 22 utgitt i desember 2017, krevde det bruk av en bro-modul for å passe med Jests støtte for Babel 6. I Jest 24 har vi migrert fullstendig over til Babel 7, med stor hjelp fra fellesskapsmedlem @milesj. Dette betyr at oppsett nå er enklere og vi kan dra nytte av andre Babel 7-funksjoner, som konfigurasjonslasting og automatisk modules-transpilering. Husk å fjerne babel-core@^7.0.0-bridge.0 da den ikke lenger trengs.
Hvis du ønsker å kjøre typesjekker under testing, bør du bruke ts-jest. Du må konfigurere transformatoren, da Jest som standard bruker Babel på .ts- (og .tsx-)filer. Alternativt kan du kjøre tsc eller til og med bruke en Jest-runner for å transpilere TypeScript samtidig som du kjører testene! Se jest-runner-tsc for mer informasjon.
Se dokumentasjonen for flere detaljer.
Hvis du av en eller annen grunn ikke kan oppgradere til Babel 7, kan du fortsatt bruke Jest 24 med babel@6 så lenge du holder babel-jest på versjon 23.
test.todo
Jest 23 hadde en endring som gjorde at tester uten implementering kastet feil i stedet for å bli hoppet over. Denne endringen ble gjort basert på tilbakemeldinger om at utilsiktet hopp over tester var vanskelige å oppdage og spore. Imidlertid forstyrret denne endringen arbeidsflyten for mange utviklere som brukte funksjonen til å skissere hvilke tester de ønsket å skrive.
I Jest 24 løser vi dette ved å introdusere en eksplisitt test.todo (inspirert av den utmerkede AVA), som vil vises separat i testoppsummeringen. Den lar deg raskt skissere hvilke tester du vil skrive, og i fremtiden kan en ESLint-regel til og med advare deg om at du har glemt å skrive noen tester.
test.todo('invalid input should throw');
test.todo('missing options should be normalized');

Forbedrede feilmeldinger ved påstander
Når tester feiler, må du kunne ta sikre og korrekte beslutninger om hvilke endringer som er forventet fremgang og hvilke som er uventede tilbakeskritt. Det er spesielt viktig å ikke overse noen få regresjoner gjemt blant mye fremgang. Jest 24 gjør rapportene ved feilede påstander klarere og mer konsise for flere matchere. Siden arbeidet vil fortsette i Jest 25, kan du legge merke til noen midlertidige uoverensstemmelser. Hvis testene dine aldri feiler, får du ikke se disse endringene - for oss andre vil det være enklere å feilsøke hvorfor noe ikke fungerer som forventet. Takk til @ittordepam og andre bidragsytere fra fellesskapet for det harde arbeidet.
Du kan se disse endringene i alle disse PR-ene: 7621, 7557, 7448, 7325, 7241, 7152, 7125, 7107, 6961.
Eksempler:
Feilende påstand

Typeuoverensstemmelse

Mock-funksjon ikke kalt

Løsning på gamle plager
Vi har løst noen virkelig gamle problemer i denne utgivelsen.
Det første vi vil fremheve er at console.log-meldinger forsvant. Jest fanger opp og samler alle logger for å gi deg en stakk-spor til dem, samt gi dem til rapporteringsverktøy slik at du kan håndtere dem som du ønsker. Dette har imidlertid ført til et problem hvor de rett og slett har manglet i visse edge cases. Heldigvis for Jest 24 har @spion løst dette problemet. Tusen takk!
Det andre er et problem hvor Jest går tom for minne hvis forskjellen i serialisering av forventet og mottatt verdi har et enormt antall innsettingsendringer (enten uventet på grunn av feil i testen eller feil i serialiseringsverktøyet, eller forventet på grunn av midlertidige feil under testdrevet utvikling). @ittordepam har erstattet den forrige diff-algoritmen med diff-sequences-pakken, som burde løse dette problemet fordi den bruker et teoretisk minimum av minne. Dette åpner for ord-differanser i fremtiden, likt det git tilbyr. Se gjerne denne PR-en og ta kontakt hvis du vil hjelpe til med å få dette til!
Andre høydepunkter
-
Vi har noen forbedringer for
globalSetupogglobalTeardown- kodetransformering vil nå bli brukt på dem likt som medsetupFiles, og de støttes nå som del avprojects. -
Du kan nå konfigurere hvor Jest lagrer snapshots, noe som er spesielt nyttig hvis du bygger verktøy som bruker Jest i en større byggeprosess.
-
En egenhet med Jest sin CLI har vært at mens noen flagg og alternativer har vært skrevet i camel case (som
runInBand), har andre ikke vært det (somno-cache). I Jest 24 gjenkjennes begge formatene, så du kan skrive CLI-argumentene dine akkurat som du ønsker. -
Vi har endret navnet fra
setupTestFrameworkScriptFiletilsetupFilesAfterEnv, og gjort det til en array. Vi håper dette gjør det mer tydelig hva alternativet brukes til. Vi planlegger en større overhaling av konfigurasjonen i neste hovedversjon, se avsnittet nedenfor. -
For å redusere mengden "magi" Jest utfører for å "bare virke™", har vi i denne versjonen valgt å fjerne automatisk injisering av
regenerator-runtime, som noen ganger brukes i kompilert async-kode. Å inkludereregenerator-runtimeer ikke alltid nødvendig, og vi mener det er brukerens ansvar å inkludere det hvis det trengs. Hvis du bruker@babel/preset-envmedtargetssatt til en moderne Node-versjon (f.eks. Node 6+), trenger du ikke å inkludere det. Se vår dokumentasjon om bruk av Babel for mer informasjon. -
Node.js 10 kom med en eksperimentell modul kalt
worker_threads, som ligner på Worker-tråder i nettleseren.jest-worker, en del av Jest-plattformen, vil kunne brukeworker_threadshvis tilgjengelig i stedet forchild_process, noe som gjør den enda raskere! Benchmarks viser en 50% forbedring. På grunn av den eksperimentelle statusen er den ikke aktivert når Jest brukes som testkjøring, men du kan bruke den i dine egne prosjekter allerede! Vi planlegger å aktivere den som standard når den blir promotert fra eksperimentell status i Node.js.
Brytende endringer
Mens alle brytende endringer er listet i endringsloggen, er det noen som er verdt å fremheve:
-
Vi har oppgradert til Micromatch 3. Dette kan påvirke noen brukere, da versjon 3 er strengere i tolkningen av globs enn versjon 2 som brukes i Jest 23. Les denne og tilknyttede saker for eksempler på ugyldige globs hvis du opplever problemer.
-
Vi har fjernet koderester som var nødvendige for Node 4. Det var tidligere teknisk sett mulig å kjøre Jest 23 på Node 4 - dette er ikke lenger mulig uten polyfilling og transpilering.
-
Noen endringer i serialisering av mock-funksjoner i snapshots - sørg for å dobbeltsjekke oppdaterte snapshots etter oppgradering. Relatert pull request.
-
Jest injiserer ikke lenger
regenerator-runtimeautomatisk - hvis du får feilmeldinger om dette, må du konfigurere Babel for å transpilereasync-funksjoner riktig, f.eks. ved bruk av@babel/preset-env. Relatert pull request.
Fremtiden
Vi er utrolig ydmyke over resultatene i State Of JS 2018, hvor Jest vant prisen for "Høyest tilfredshet". En annen stor hendelse i 2018 var i oktober, da Jest passerte 2 millioner ukentlige nedlastinger for første gang. Takk.
Vi er veldig takknemlige for tilliten fra fellesskapet, og håper å bygge videre på dette i fremtiden. Vi vil sørge for at Jest 24 og fremtidige versjoner fortsetter å bygge på dette fantastiske grunnlaget, og forblir en integrert del av JavaScript-utviklernes verktøykasse.
Dette er første gang vi har prøvd å bruke Open Collective-midlene våre til å lage feilbonuser. Dette fungerte godt for å involvere utviklere utenfor kjernegruppen i implementeringen av den nye landingssiden, og vi er optimistiske når det gjelder en langvarig feil der Jest-globaler ikke samsvarer med Node-globaler. Vi ønsker å gjøre mer av dette - hvis du har en kjær feil som passer for bonusprogrammet vårt, gi oss gjerne beskjed. I mellomtiden finner du alle sakene med bonus via etikett for saker.
Vi har allerede begynt å planlegge neste utgivelse av Jest 25, der den største planlagte funksjonen er en overhaling av konfigurasjonen vår. Den er ganske vanskelig å forstå, hovedsakelig på grunn av overlappende alternativer og blanding av globs og regulære uttrykk. Tilbakemeldinger om hvordan du ønsker at Jest-konfigurasjonen skal se ut, er svært velkommen og kan sendes inn i denne saken.
Du har kanskje også hørt at vi planlegger å migrere kodebasen fra Flow til TypeScript. Vi håper denne migrasjonen vil gjøre det enda enklere for bidragsytere å hoppe inn og hjelpe med å gjøre 2019 til et enda bedre år for JavaScript-testing. 🚀 Planen er å lansere dette i en mindre utgivelse i nær fremtid. Tilbakemeldinger om dette valget kan legges til i RFC-en.
Til slutt, hvis du noen gang har lurt på hvordan Jest er bygget, har @cpojer spilt inn en video med en arkitektonisk oversikt over hvordan Jest fungerer under panseret. Ta gjerne kontakt hvis du har flere spørsmål om dette. Videoen er tilgjengelig på vår nettside.
Lykke til med testingen! 🃏
