Hopp til hovedinnhold

Jest 22: Forbedringer og egendefinerte kjøretider

· 8 min å lese
Simen Bekkhus
Simen Bekkhus
Unofficial Beta Translation

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

I dag kunngjør vi en ny hovedversjon av Jest som forbedrer nesten alle deler av rammeverket for å gi et mer solid testgrunnlag. Sammen med Jest-fellesskapet har vi gjort en rekke endringer som vil hjelpe deg å få mer utbytte av Jest. Vi lanserer også egendefinerte kjøretider fra eksperimentell fase og legger til et nytt pakke, jest-worker, for parallellisering av arbeid på tvers av prosesser. Vi har satt sammen en liste med høydepunkter nedenfor, men sørg for å sjekke den (som alltid) omfattende endringsloggen.

Farvel Node 4 & velkommen JSDOM 11

Med denne utgivelsen slutter vi å støtte Node 4, hovedsakelig fordi en av våre viktigste avhengigheter, JSDOM, avsluttet sin støtte. Jest følger nå med JSDOM 11 ut av boksen, som gir bedre støtte for SVGer, innebygd requestAnimationFrame, URL og URLSearchParams, samt mye mer.

Egendefinerte kjøretider + Enkel parallellisering med jest-worker

I Jest 21 introduserte vi konseptet med egendefinerte Jest-kjøretider. Siden den gang har Rogelio, en av Jests kjernebidragsytere, utviklet flere nyttige kjøretider: Hvis du har mange eksisterende tester skrevet med et annet rammeverk, men ønsker å dra nytte av Jests funksjoner umiddelbart, sjekk ut jest-runner-mocha. Har du en stor kodebase som trenger linting, kan du oppnå betydelig hastighetsøkning ved å kjøre eslint innenfor Jest ved hjelp av jest-runner-eslint.

For å få mer detaljert kontroll over parallellisering av tunge oppgaver (f.eks. filtransformering eller filsystem-skanning), har vi designet et nytt bibliotek perfekt tilpasset jobben. Vi utviklet et moderne, Promise-basert modul med et tilgjengelig API, kalt jest-worker, som lar deg delegere ressurskrevende funksjoner til barne-prosesser. Siden jest-worker, som alle andre Jest-pakker, er en del av Jest-plattformen, kan du bruke den akkurat slik du ønsker, selv uten å bruke Jest i det hele tatt. Du finner mer informasjon i dokumentasjonen her.

For å bedre forstå egendefinerte kjøretider og Jest som plattform, må du se Rogelios foredrag fra Reactive Conf 2017: Jest as a Platform.

Koderamme ved testfeil

For å enklere identifisere hvilket påstand som feiler i testen din, har vi lagt til en koderamme som viser konteksten rundt påstanden. Dette hjelper deg å fokusere på din egen kode. Se følgende eksempeltest:

test('some test', () => {
function someFunctionWhichShouldThrow() {
if (false) {
throw new Error();
}

return 'success!';
}

expect(someFunctionWhichShouldThrow).toThrow();
});

I Jest 21 ville vi vist følgende feil:

failure in Jest 21

I Jest 22 har vi lagt til en koderamme som gir mer kontekst til feilende påstander. Vi har også ryddet i stakk-sporet for å fjerne mer støy enn noensinne.

failure in Jest 22

Enklere testing av feil i asynkron kode

Du kan nå bruke toThrow og toThrowErrorMatchingSnapshot på promise-avvisninger på samme måte som på synkrone feil.

async function throwingFunction() {
throw new Error('This failed');
}

test('asynchronous rejection', async () => {
await expect(throwingFunction()).rejects.toThrowErrorMatchingSnapshot();
});

Asynkrone testmiljøer

Da Puppeteer, en måte å programmatisk samhandle med en ekte Chromium-nettleser på, ble lansert av Google Chrome-teamet i august, ønsket mange å kunne bruke Jest til å skrive tester som kjører i Chrome. Fellesskapet har hjulpet oss med å muliggjøre dette ved å tillate asynkrone testmiljøer. Vi jobber fortsatt med å gjøre denne opplevelsen så god som mulig, men se denne guiden for hvordan du bruker Puppeteer med Jest, allerede i dag.

Eksperimentell minnelekkasjedeteksjon

Vi har lagt til en eksperimentell innstilling --detectLeaks i Jest som varsler hvis ditt interne miljø-objekt lekker etter testkjøring. Den vil også advare deg når testgruppen din prøver å hente en fil etter at testen er avsluttet, noe som tyder på at du glemte å vente på alle asynkrone operasjoner eller ikke ryddet opp ordentlig. Dette vil imidlertid ikke oppdage lekkasjer i brukerkode, kun i testkode – selv om teknologien bak (jest-leak-detector) kan hjelpe deg. Hvis du rapporterer en feil om Jests minnebruk, vennligst legg ved et eksempel hvor --detectLeaks får testsuiten til å feile. Vi har begynt å bygge en bedre sandkassemekanisme for Jest, men den er ikke klar for å aktiveres som standard ennå. Ønsker du å hjelpe til, ta kontakt på Discord!

Forbedringer i overvåkingsmodus

Når du bruker overvåkingsmodus, finnes det nå en måte å kun fokusere på tester som tidligere feilet. I denne modusen vil Jest ikke kjøre tester som tidligere passerte, noe som skal hjelpe deg å rydde opp i testfeil. I tillegg har vi lagt til et pluginsystem for overvåkingsmodus. Ved å legge til moduler i watchPlugins i konfigurasjonen din, kan du utvide funksjonaliteten i overvåkingsmodus.

Støtte for Babel 7

Jest bruker Babel under panseret for kodedekningsanalyse og avanserte mock-funksjoner. Med Jest 22 støtter den også den kommende Babel 7. Du finner mer informasjon i dokumentasjonen her.

Forbedringer av mock-funksjoner

Mock-funksjoner i Jest 22 har fått flere forbedringer som gjør dem enklere å bruke. For det første har vi lagt til en mockName-egenskap som lar deg navngi mockene dine, noe som er nyttig ved feil i påstander. Vi har også gjort Jest-mockfunksjoner serialiserbare i pretty-format, noe som betyr at du kan bruke snapshot-tester på dem. I Jest 21 ville expect(jest.fn()).toMatchSnapshot() serialiseres til [Function], mens i Jest 22 kan du få noe slikt:

test('my mocking test', () => {
const mock = jest.fn().mockName('myMock');

mock('hello', {foo: 'bar'});

expect(mock).toMatchSnapshot();
});

// Serializes to:

exports[`my mocking test 1`] = `
[MockFunction myMock] {
"calls": Array [
Array [
"hello",
Object {
"foo": "bar",
},
],
],
}
`;

Høydepunkter fra Jest 21

Jest 21 ble lansert i september, og vi rakk dessverre aldri å skrive et blogginnlegg. Her er en rask oppsummering av hovedendringene i versjon 21:

  1. Bruk expect og jest-mock i nettleseren: Michael Jackson donerte sitt utmerkede expect-bibliotek til Jest-prosjektet. Som del av overgangen gjorde Jest-kjerne-teamet, med mye hjelp fra Kenneth Skovhus, både jest-matchers (omdøpt til expect) og jest-mock kompatible med nettlesere. Dette betyr at selv om du ikke kan bruke Jest selv i nettlesere (ennå), kan du bruke dets fantastiske påstandsverifiseringer og mock-funksjoner som erstatning for f.eks. Chai og Sinon i Mocha-tester. Hvis du migrerer fra tidligere expect til den nye Jest-baserte expect, kan du bruke jest-codemods for å automatisere migreringen.

  2. MIT-lisens: Vi endret Jests lisens til MIT. Hurra!

  3. Feilende testsuiter på asynkrone feil: Jest hadde tidligere en feil som førte til at den krasjet når feil ble kastet i visse deler av asynkron kode. Dette ble rettet av bidragsytere fra fellesskapet.

  4. Raskere oppstart: Med Jest 21 finjusterte vi oppstarten av Jest til å være mer enn 50% raskere. Den store påkjenningen ved å kjøre Jest på små og raske tester var alltid et problem for oss, og nå skal dette ikke lenger være en grunn til å holde deg tilbake fra å bruke Jest.

Jest-fellesskapet

Fellesskapet rundt Jest jobber hardt for å gjøre testingsopplevelsen enda bedre. Dette er separate prosjekter fra hoved-Jest-prosjektet, men vi vil fremheve noen av våre personlige favoritter her.

  • jest-image-snapshot – egendefinert matcher for å sammenligne bilder med øyeblikksbilder, utviklet av American Express-utviklere

  • ts-jest – alt du trenger for å kjøre Jest i TypeScript-prosjekter, av @kulshekhar

  • jest-codemods – migrer tester fra andre rammeverk til Jest med letthet

  • jest-plugins – et nytt fellesskapsprosjekt som fokuserer på å forenkle oppsett av testmiljø for spesifikke verktøy som React, eller tilby praktiske verktøy

Vi vil også annonsere at vi nylig lanserte et nytt sted for høykvalitets Jest-tillegg – jest-community. Dette er en ny GitHub-organisasjon som allerede inkluderer våre favorittprosjekter som vscode-jest og jest-extended, kuratert av Jest-vedlikeholdere og samarbeidspartnere. Vi har til og med migrert vår eslint-plugin-jest dit, og ser allerede flotte bidrag som publiseres raskere og uavhengig.

Jest Community

Fellesskapsprosjekter under én organisasjon er også en flott måte for oss å eksperimentere med ting som automatiserte utgivelser, som vi vil utforske for Jest også. De lar oss også dele felles elementer som README-struktur (takk til webpack-fellesskapet for ideen), noe som gjør det enklere å lære og bruke for alle.

Hvis du har noe fantastisk å dele, ta gjerne kontakt! Vi elsker å dele prosjekter her.