Vai al contenuto principale

Jest 23: 🔥 Testing Super Veloce e Piacevole

· 7 min di lettura
Ricky Hanlon
Ricky Hanlon
Traduzione Beta Non Ufficiale

Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →

Siamo entusiasti di annunciare oggi Jest 23, la nostra release principale più grande di sempre! Insieme a oltre 100 contributori, abbiamo pubblicato tantissime funzionalità e correzioni di bug. Grazie a tutti nella community per aver contribuito a rendere il Testing JavaScript un'esperienza piacevole.

Diamo inoltre il benvenuto a Babel e webpack nella community Jest! Dopo la migrazione da Mocha a Jest 23 Beta, webpack ha ridotto il tempo totale dei test di 6 volte, passando da oltre 13 minuti a 2 minuti e 20 secondi. #blazingmeansgood

Ecco alcune delle novità e cambiamenti breaking di Jest 23.

Per l'elenco completo consulta il changelog.

Modalità Snapshot Interattiva

Abbiamo aggiunto una nuova opzione predefinita nel menu di watch che chiamiamo Modalità Snapshot Interattiva. Questa modalità ti permette di scorrere ogni snapshot fallito in ogni suite fallita per rivedere gli snapshot non riusciti e scegliere se aggiornarli o saltarli singolarmente.

Modalità snapshot interattiva in azione

Consulta la documentazione sulla Modalità Snapshot Interattiva qui.

Property Matcher per Snapshot

Spesso gli oggetti di cui fai snapshot contengono valori generati come date e ID. Jest ora ti permette di passare proprietà al matcher degli snapshot che specificano la struttura dei dati invece dei valori specifici. Questi property matcher vengono verificati prima di serializzare il tipo di matcher (invece del valore), garantendoti risultati di snapshot coerenti tra diverse esecuzioni dei test.

Property Matcher per Snapshot

Consulta la documentazione aggiornata di toMatchSnapshot o la guida sui Property Matcher per maggiori informazioni.

Matcher Asincroni Personalizzati

Ora supportiamo matcher asincroni con expect.extends! I matcher asincroni restituiscono una Promise così che puoi usare await per attendere la risoluzione del matcher. Ad esempio:

Matcher asincroni personalizzati in azione

Documentazione disponibile qui.

Matcher Asimmetrici Personalizzati

I matcher asimmetrici sono strumenti potenti quando ti interessa solo l'uguaglianza asimmetrica. Ad esempio, quando il lato sinistro dovrebbe essere un oggetto con un sottoinsieme di proprietà del lato destro, invece di una corrispondenza esatta. Jest fornisce diversi matcher asimmetrici predefiniti, e in questa release introduciamo i Matcher Asimmetrici Personalizzati.

Matcher asimmetrici personalizzati in azione

Jest Each

@mattphillipsio ha donato il pacchetto jest-each al core di Jest (grazie Matt!). jest-each è una libreria ispirata a mocha-each e alle Tabelle Dati di Spock che ti permette di definire una tabella di casi di test, ed eseguire un test per ogni riga con i valori di colonna specificati. Supportiamo sia array che template literal per tutte le varianti di describe e test. La documentazione è disponibile qui, e per chi non è ancora su Jest 23, continuiamo a pubblicare jest-each separatamente!

jest-each in azione

Un enorme ringraziamento a Prettier per aver risolto rapidamente la formattazione delle tabelle (vedi Prettier 1.13)!

Nuovi Matchers

Aggiungiamo matchers al core solo se riteniamo siano utili per una vasta comunità di Jest, lasciando alla comunità la maggior parte dei matchers (vedi jest-extended). Alcuni matchers sono stati selezionati per il core, e Jest 23 introduce:

  • nthCalledWith

  • toReturn

  • toReturnTimes

  • toReturnWith

  • lastReturnedWith

  • nthReturnedWith

  • toStrictEqual

Nuovi matchers in azione

Consulta la documentazione aggiornata di expect qui.

Debug dei Test Bloccati

Un problema comune segnalato riguarda Jest che si "blocca" dopo l'esecuzione dei test. Solitamente è causato da codice dell'applicazione che lascia handle aperti, impedendo a Jest di terminare. In passato, gli utenti hanno usato --forceExit come soluzione (non raccomandato).

Per aiutare a diagnosticare questi problemi, ora rileviamo quando Jest non termina:

Rilevamento test bloccati

E offriamo una nuova opzione --detectOpenHandles per individuare gli handle aperti:

Esecuzione di detectOpenHandles

Consulta la documentazione CLI aggiornata qui.

Plugin per la Modalità Watch

Abbiamo completamente riscritto il sistema della modalità watch per consentire l'aggiunta di plugin personalizzati. I Watch Mode Plugin permettono ora di agganciarsi agli eventi di Jest e aggiungere opzioni personalizzate al menu della modalità watch. Tutti i prompt predefiniti sono implementati come plugin, e la documentazione per crearne di personalizzati è disponibile qui.

Con questo cambiamento, riportiamo anche il supporto per il typeahead come Watch Mode Plugin tramite jest-watch-typeahead!

Plugin Typeahead in azione

Consulta jest-watch-typeahead per documentazione e istruzioni d'installazione. Un enorme grazie a @rogeliog per il nuovo sistema di plugin e per jest-watch-typeahead!

Modifiche di Rottura

Come in ogni major release, apportiamo alcune modifiche di rottura per abilitare cambiamenti futuri e migliorare l'esperienza di testing. Ecco le principali modifiche:

  • Descrizioni e funzioni obbligatorie per i test: Ora falliscono i test privi di descrizione o funzione.

  • Rimozione proprietà undefined dagli snapshot React: Snapshot più compatti e comportamento React corretto.

  • Rimozione deprecazioni: Eliminato mapCoverage (non più necessario). Rimossi anche jest.genMockFunction e jest.genMockFn (equivalenti a jest.fn).

  • Nomi degli snapshot nei fallimenti: Aggiunto il nome dello snapshot (se presente) ai messaggi di errore per identificare più facilmente lo snapshot fallito.

  • Sostituzione dei timestamp mock: Abbiamo sostituito i timestamp mock con invocationCallOrder poiché due o più mock spesso hanno lo stesso timestamp, rendendo impossibile testare l'ordine delle chiamate.

  • Aggiunta risultati agli snapshot mock: Abbiamo aggiunto i risultati delle chiamate delle funzioni mock agli snapshot per tracciare sia le chiamate che i risultati delle invocazioni.

Altri Miglioramenti

  • Copertura in modalità watch: La copertura è ora limitata solo ai file testati in modalità watch o quando si usano --onlyChanged e --findRelatedTests.

  • Documentazione versionata: Abbiamo aggiunto documentazione per ogni release minore fino a Jest 22 e rimosso tutti i "Richiede Jest X.X+" dalla documentazione.

  • Riepiloghi snapshot migliorati: Abbiamo rivisto l'output del Riepilogo Snapshot per rendere più informativi gli snapshot obsoleti.

  • Stack trace migliorate: Abbiamo aggiunto stack trace per errori asincroni, errori di timeout, expect.assertions ed eccezioni non standard. Indichiamo anche la colonna nel code frame!

  • Miglior supporto React 16: Aggiunge supporto snapshot per React.Fragment, React.forwardRef e React.createContext.

  • Tracciamento valori return/throw mock: Aggiunge mock.results che contiene il valore di ritorno o l'eccezione per ogni chiamata mock.

  • Blazing 🔥: Abbiamo aggiunto un badge "blazing" al README per indicare che Jest è eccezionale.

Jest Summit

La scorsa settimana, il Core Team di Jest si è riunito per il Jest Summit presso Facebook Londra, dove abbiamo lavorato e rilasciato Jest 23, annunciato il Jest Open Collective e tenuto diversi talk:

Il talk completo è disponibile qui.

La partecipazione è stata incredibile e abbiamo potuto incontrare di persona molti membri della community londinese. Grazie a tutti coloro che hanno partecipato e per il continuo supporto! Restate sintonizzati per il prossimo post in cui descriveremo il Jest Open Collective e i nostri piani futuri.

Come sempre, questa release non sarebbe stata possibile senza di voi, la community JavaScript. Siamo incredibilmente grati per l'opportunità di lavorare insieme per migliorare il testing JavaScript. Se desideri contribuire a Jest, non esitare a contattarci su GitHub o su Discord.