Hopp til hovedinnhold

Jest 20: 💖 Inspirerende testing & 🏃🏽 Multi-prosjekt-kjører

· 7 min å lese
Unofficial Beta Translation

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

For noen måneder siden kunngjorde vi Jest 19 som kom med store nye funksjoner og var den største Jest-utgivelsen til idag. Jest 20 har dobbelt så mange endringer sammenlignet med forrige versjon, inneholder en komplett omskriving av testkjøreren, og legger til nye test-APIer. Denne nye utgivelsen gir et nytt nivå av tilpasning og konfigurasjon for prosjekter, samtidig som oppgradering gjøres enkelt. Utover smertefri JavaScript-testing mener vi nå Jest leverer en inspirerende JavaScript-testopplevelse. La oss se nærmere på de beste nye funksjonene og endringene:

Multi-prosjekt-kjører & konfigurasjonsforbedring

Til nå kunne Jest bare operere i ett prosjekt om gangen. Dette er ofte tungvint hvis du jobber med mange mindre prosjekter som hver har sin egen oppsett og konfigurasjon. Med Jest 20 omskrev vi testkjøreren helt for å kjøre mange prosjekter samtidig i en enkelt Jest-instans, for eksempel hvis du jobber med et React-frontend og en node.js-backend. Her er en video som viser Jest kjøre tester for React, Relay, Yarn og Jest samtidig:

multi-kjører

Jest slår nå sammen bruksveiledningen etter første testkjøring for å spare plass i terminalen.

Videre har vi fullstendig forbedret hvordan konfigurasjonssystemet fungerer i Jest. Du kan nå sende hvilken som helst konfigurasjonsopsjon via CLI for å overstyre de som er spesifisert i konfigurasjonsfilen din. Samtidig endret vi Jest til å søke etter en jest.config.js-fil som standard, noe som betyr at du nå kan definere Jest-konfigurasjon ved hjelp av JavaScript i tillegg til å konfigurere den via package.json som før. Med tilføyelsen av alle disse nye funksjonene kan du nå kombinere Jest på kraftigere måter enn noen gang. For eksempel, hvis du ønsker å finne ut hvilke tester Jest ville kjørt gitt en rekke endrede filer fra en commit på tvers av flere prosjekter i en monorepo, kan du nå kombinere CLI-argumenter slik:

$ jest --projects projectA projectB --listTests --findRelatedTests projectA/banana.js projectB/kiwi.js
[
"projectA/banana.test.js",
"projectB/kiwi.test.js",
"projectB/pineapple.test.js",
]

Dette er spesielt nyttig for kontinuerlig integrasjonssystemer (CI) der du kanskje bare vil kjøre en delmengde tester for Pull Requests for å hindre Jest i å kjøre tusenvis av testfiler ved hver lille endring.

Til slutt mapper vi nå kodedekning riktig når vi bruker TypeScript, og vi kjører kodedekning for utestedte filer i arbeiderprosesser som gir betydelige hastighetsgevinster for denne funksjonen.

Nye & forbedrede test-APIer

Vi har gjort en rekke tilføyelser og forbedringer av test-APIene som vil hjelpe deg å skrive mer effektive tester. Vi vil gjerne påpeke at alle disse forbedringene ble gjort utelukkende av fellesskapsmedlemmer!

  • Bedre asynkron testing: Nytt async/Promise-støtte gjennom resolves/rejects-modifikatorer på expect: expect(Promise(…)).resolves.toEqual(…). Se dokumentasjon.

  • Forvent n påstander: Sammen med den eksisterende expect.assertions(n), kan den nye expect.hasAssertions() brukes for å sikre at en test har minst én påstand.

  • Lint-tillegg: En valid-expect-regel ble lagt til i eslint-plugin-jest for å sikre at en påstand kalles etter å ha brukt expect. Dette forhindrer feil som en løs expect(banana); uten påstandskall.

  • Pretty-Format-tillegg: Flere nye pretty-format-tillegg ble lagt til i Jest. Vi formaterer nå Immutable.js datastrukturer og HtmlElements penere i påstandsfelil og øyeblikksbilder.

  • Tilpasset miljø: Det er nå mulig å legge til en @jest-environment node|jsdom-merknad i doc-block-kommentaren til en testfil for å bruke et testmiljø som avviker fra standard for individuelle tester.

Her er et eksempel på hvordan alle de nye API-ene sammen gjør testing mer gledelig:

/**
* @jest-environment node
*/

test('compares apples and bananas', async () => {
expect.hasAssertions(); // Ensure this test has at least one assertion.

await expect(
Promise.resolve(Immutable.Map({apples: 1, bananas: 2})),
).resolves.toEqual(Immutable.Map({apples: 1, bananas: 3}));

expect('banana'); // valid-expect in eslint-plugin-jest will show an error.
});

Dette eksempelet vil skrive ut en testfeil som ligner på dette:

testing-apis

Brytende endringer

Som med hver større utgivelse, gjør vi en rekke brytende endringer for å muliggjøre større endringer i fremtiden og for å løfte testopplevelsen til et nytt nivå. Denne gangen har vi forsøkt vårt beste med å kun bryte API-er som vi ikke forventer vil påvirke flertallet av Jests brukere:

  • Forgrening av Jasmine 2.5: Vi har endelig bestemt oss for å forgrene Jasmine selv og ta eierskap over Jests egen testkjøringsmotor. Dette vil tillate oss å forbedre alle aspekter av enhetstestingsopplevelsen i fremtiden, men foreløpig fokuserer vi på gradvise omskrivinger og reduksjon av API-overflaten. Hvis du ser en test feile som følge av et Jasmine-API som nå mangler, bør det finnes en tilsvarende funksjon på jest- eller expect-objektene. Som et resultat har vi fjernet mange Jasmine-funksjoner som ikke vanligvis brukes i de fleste kodebaser.

  • Nye øyeblikksbilder på CI: Øyeblikksbilder må alltid være innchecket sammen med testen og modulene de tester. Vi endret Jest til ikke å lagre nye øyeblikksbilder automatisk i kontinuerlig integrasjonsmiljøer (CI) eller når flagget --ci er spesifisert. For å overstyre denne oppførselen, noe som generelt ikke anbefales, kan flagget --updateSnapshot brukes.

  • Babel-polyfill: Jest pleide å laste babel-polyfill automatisk når man brukte babel-jest, noe som førte til minnelekkasjer inne i Jest. I de fleste versjoner av node er det ikke nødvendig å laste babel-polyfill, så vi fjernet denne automatiske inkluderingen og endret i stedet Jest til kun å inkludere regenerator-runtime som standard, som ofte brukes for å støtte async/await i eldre versjoner av Node.js. Hvis du trenger babel-polyfill, kan du manuelt inkludere det i oppsettsfilene dine.

Andre forbedringer

  • Dokumentasjon: Dokumentasjon er avgjørende for å dele beste praksis og lære alle hvordan de skriver effektive tester som vil føre til bedre programvare. De siste ukene har vi også utvidet Jests dokumentasjon til å inkludere en FAQ for øyeblikksbildetesting, en guide med informasjon om hvordan du bruker Jest med vanlige JavaScript-biblioteker, samt dokumentert de nye funksjonene nevnt ovenfor.

  • Oversettelser: Vi ber nå om din hjelp til å oversette Jest-dokumentasjonen for å gjøre det enklere for folk å lære å bruke Jest.

  • Egendefinerte rapporteringsverktøy: Jest støtter nå egendefinerte testrapporteringsverktøy gjennom konfigurasjonsvalget reporters. Du kan endelig tilpasse utdataene fra Jest samt integrere det med andre verktøy ved å generere rapporter i formater som XML. Se dokumentasjon.

  • Kodebasehelse: Det var bare mulig å iterere så raskt i Jest fordi vi brukte betydelig tid på kodebasens helse. Vi var en av de første til å ta i bruk prettier, vi økte bemerkelsesverdig flytedekningen, forgrenet Jasmine for å forbedre testkjøringsbiblioteket vårt, og vi omskrev og omstrukturerte betydelige deler av Jest selv for å sikre suksess for Jest i fremtiden.

  • Feilrettinger: Som alltid har vi gjort mange feilrettinger i Jest. Fullstendig endringslogg finnes i Jest-gitlageret.

Foredrag om Jest

Nylig begynte Jest-kjernegruppen og andre bidragsytere å snakke mer om Jest og erfaringene med å jobbe med Jest på konferanser:

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