Hopp til hovedinnhold

Jest 11.0

· 5 min å lese
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 overgang til større revisjoner for Jest med Jest 11.0 som den første hovedutgivelsen. Jest har blitt brukt av Facebook-ingeniører og i våre kontinuerlige integrasjonssystemer i flere år, og vi mener Jest har vært langt forbi en "1.0-utgivelse" lenge. Dette ligner på en endring React-teamet gjorde.

Hvis du bruker Jest 0.9 eller Jest 0.10, bør oppgraderingen være sømløs. Alle endringene de siste månedene er rullet inn i Jest 11.0.

Nytt i Jest 11.0

Babel-integrasjon og forenklet oppsett

babel-jest ble adoptert i det nylig modulariserte Jest-depotet og er nå sømløst integrert i Jest. Hvis du oppgraderer fra en eldre versjon av Jest eller vurderer å ta i bruk Jest, anbefaler vi å lese Kom i gang-guiden.

Tidligere tilbød Jest APIer som jest.dontMock som fjerner mocking av en modul som deretter kreves ved hjelp av require-funksjonen. Testkode så vanligvis slik ut:

jest.dontMock('LikeButton');
const LikeButton = require('LikeButton'); // LikeButton is unmocked

Men sammen med ES2015-importsetninger vil dette ikke lenger fungere. I følge spesifikasjonen blir import-setninger hevet til toppen av kodeblokken. Kode skrevet slik:

jest.dontMock('LikeButton');
import LikeButton from 'LikeButton';

når den utføres, vil faktisk bli kjørt i denne rekkefølgen:

import LikeButton from 'LikeButton'; // This happens before the dontMock call.
jest.dontMock('LikeButton');

LikeButton-modulen ville derfor blitt mocket selv om vi eksplisitt kaller dontMock.

Når de nyeste versjonene av Jest og babel-jest brukes sammen, blir kall til de nye APIene jest.unmock, jest.mock, jest.disableAutomock og jest.enableAutomock hevet til toppen av blokken, før ES2015-importsetninger.

jest.unmock('LikeButton');
import LikeButton from 'LikeButton'; // LikeButton is properly unmocked!

Forbedringer av (auto)mocking

Vi har gjort mange forbedringer og feilrettinger til Jests automocking-funksjon, forbedret npm3-støtte og lagt til nye manuelle mocking-APIer. Mange har uttrykt ønske om å bruke Jest med automocking deaktivert. En global konfigurasjonsopsjon automock, som kan settes til false, ble lagt til.

Vi har også lagt til to nye APIer for å forenkle manuelle mocks. jest.mock spesifiserer en manuell mock-fabrikk for en bestemt test:

// Implement a mock for a hypothetical "sum" module.
jest.mock('sum', () => {
return (a, b) => a + b;
});

const sum = require('sum');
sum(1, 4); // 5

Og jest.fn ble lagt til for å gjøre det enklere å lage mock-funksjoner:

// Create a mock function
const mockFn = jest.fn(() => 42);
mockFn(); // 42
expect(mockFn.calls.length).toBe(1);

Ytelse

Vi skrev nylig om ytelsesforbedringer vi har gjort i Jest. Mest bemerkelsesverdig er oppstartstiden forbedret, og vi er nå komfortable med ytelsen.

Jasmine og forbedringer av testpåstander

Da Jest ble åpen kildekode, fulgte den med Jasmine 1. Jest ble designet for å fungere med ethvert testpåstandsbibliotek, og valgfri Jasmine 2-støtte ble lagt til gjennom et eksternt bidrag ved slutten av i fjor. Denne endringen gir bedre ytelse og bedre APIer enn forrige versjon av Jasmine. Vi har derfor konvertert alle våre JavaScript-tester på Facebook til Jasmine 2. Med Jest 11 gjør vi Jasmine 2 til ny standard. Jasmine 1 kan aktiveres via konfigurasjonsalternativet testRunner.

Vi har også gjort mange oppdateringer rundt Jasmine. Feilmeldingene for egendefinerte matchere for Jests mock-funksjoner er forbedret og vil nå også fungere for Jasmine-spioner. Tester som er hoppet over ved bruk av fit eller fdescribe, rapporteres nå korrekt på slutten av en testkjøring.

Andre endringer

Kommandoen jest --watch har blitt omskrevet og forbedret. Som standard kjører den nå kun tester relatert til endrede filer. Hvis du ønsker å kjøre alle tester ved hver endring, kan du bruke jest --watch=all. Den utførlige loggerutskriften er også forbedret, og vi har lagt til flere hjelpsomme advarsler og feilmeldinger. Vi har introdusert et testEnvironment-konfigurasjonsalternativ for å tilpasse testmiljøet. For eksempel kan du når du utvikler en node-tjeneste bruke et spesialisert node-miljø istedenfor jsdom. Til slutt har nettstedet og all dokumentasjon blitt fullstendig omskrevet.

Alle endringer fra de siste månedene finner du i CHANGELOG.

Bidrag og Jests fremtid

I løpet av de siste seks månedene har Jest mottatt betydelige endringer fra et stort antall nye bidragsytere. Jeg vil takke alle bidragsyterne i åpen kildekode og Facebook-ansatte for deres hjelp med å gjøre Jest bedre for alle. Nye bidragsytere: Alexander Juarez, Christian Lentfort, Cristian Carlesso, Dan Abramov, Dmitrii Abramov, Evan Jacobs, James Friend, James Ide, Jeff Carpenter, Joe Lencioni, Michael Diolosa, Nik Graf, Pavel Prokopenko, Pavel Volokitin, Sebastian Mayr og ShihChi Huang.

Med deres støtte ser vi frem til å gjøre Jest enda bedre i de kommende månedene. Vi jobber for tiden med forbedret React (Native)-testing, utvidet støtte for kodedekning, og planlegger å åpne kildekoden til vår interne testkjører som lar deg kjøre flere Jest-prosjekter med en enkelt kjørekommando.