Vai al contenuto principale

Jest 16.0: CLI Potenziato & Aggiornamento della Community

· 7 min di lettura
Traduzione Beta Non Ufficiale

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

È passato un mese dall'ultima major release e da allora abbiamo apportato significativi miglioramenti a Jest. In questa major release aggiorniamo il formato degli snapshot, cosa che probabilmente richiederà di aggiornarli quando si passerà a Jest 16. Non prendiamo queste decisioni alla leggera e non ci aspettiamo che accada spesso, ma riteniamo necessario migliorare periodicamente il formato.

CLI Potenziato

reporter

Jest 16 introduce una nuova interfaccia per i reporter che mostra i test in esecuzione, un riepilogo in tempo reale e una barra di avanzamento basata sui tempi di esecuzione stimati dai precedenti run. Abbiamo anche migliorato l'output della CLI per una migliore compatibilità con diversi schemi di colori. Se ci sono stati test falliti in un'esecuzione precedente, Jest ora li eseguirà sempre per primi per fornire rapidamente feedback utili agli utenti.

Abbiamo aggiunto molte nuove funzionalità che potreste trovare utili:

  • Nuovi flag CLI: aggiunta l'opzione --testNamePattern=pattern o -t <pattern> per filtrare i test dalla riga di comando, simile a it.only o fit nei test.

  • I test precedentemente falliti vengono ora sempre eseguiti per primi.

  • jest <pattern> ora è case-insensitive per semplificare il filtraggio dei file di test.

  • Un test in modalità watch può ora essere interrotto. Durante l'esecuzione, basta premere uno dei tasti usati per l'input in watch mode (a, o, p, q o enter) per interrompere l'esecuzione e avviarne una nuova.

  • Il flag --bail ora funziona anche in watch mode. Insieme all'esecuzione prioritaria dei test falliti, la watch mode di Jest sembrerà potenziata!

  • Jest considera ora automaticamente i file e i test con estensione jsx.

  • Jest segnala i file di mock manuali duplicati e abbiamo migliorato i mock generati automaticamente per i moduli ES compilati con babel.

  • Aggiunta la funzione jest.clearAllMocks per cancellare tutti i mock tra un test e l'altro.

  • Migliorata la risoluzione dei moduli quando si usa moduleNameMapper.

  • Infine, aggiunta l'opzione CLI --findRelatedTests <fileA> <fileB> per eseguire i test correlati ai file specificati. Particolarmente utile come hook pre-commit per eseguire test solo sui file che hanno test associati.

Ecco come si presenta Jest quando un test viene interrotto in watch mode: watch

Aggiornamenti agli Snapshot

L'implementazione degli snapshot di Jest è stata completamente riscritta. La nuova versione del pacchetto jest-snapshot è ora strutturata per semplificare l'integrazione con altri test runner e abilitare integrazioni avanzate come con React Storybook. Jest non contrassegna gli snapshot come obsoleti nei file con test saltati o falliti. Abbiamo anche apportato diverse modifiche al formato:

  • Oggetti e array sono ora stampati con una virgola finale per minimizzare futuri cambiamenti negli snapshot.

  • Abbiamo rimosso i nomi delle funzioni dagli snapshot. Causavano problemi con diverse versioni di Node, con gli strumenti di code coverage e in generale non riteniamo utile mostrare all'utente il cambiamento del nome di una funzione.

  • Gli snapshot sono ora ordinati con ordinamento naturale all'interno di un file.

Aggiornando a Jest 16, il diff potrebbe apparire simile a questo: snapshots

Aggiornamenti alla Libreria di Test

Abbiamo completato la migrazione delle asserzioni Jasmine verso i nuovi matcher di Jest. Abbiamo aggiunto tre nuovi matcher: toBeInstanceOf, toContainEqual e toThrowErrorMatchingSnapshot. Abbiamo migliorato i messaggi di errore per i matcher relativi a spy/mock: toHaveBeenLastCalledWith, toHaveBeenCalledWith, lastCalledWith e toBeCalledWith. Ora che abbiamo riscritto tutte le asserzioni e le abbiamo separate nel loro pacchetto, lavoreremo per renderle autonome così che possano essere integrate in qualsiasi framework di test.

Abbiamo anche aggiunto alcuni alias richiesti dalla community. Per focalizzare Jest su un singolo test puoi ora usare it.only o test.only oltre a fit; per saltare un test, sono disponibili it.skip o test.skip accanto a xit; infine per definire un test come concorrente puoi usare test.concurrent, particolarmente utile quando il test accede a risorse di rete o database.

Infine, se desideri sovrascrivere il globale expect con una libreria di asserzioni diversa come chai, ora puoi farlo usando l'opzione di configurazione setupTestFrameworkScriptFile.

Aggiornamento dalla Community

Nell'ultimo mese sono stati scritti molti articoli sulla funzionalità di snapshot testing di Jest, su come migrare a Jest e su come iniziare a scrivere test. Ho anche realizzato alcuni video live per spiegare il funzionamento di Jest e dello snapshot testing:

Diverse persone hanno scritto articoli sullo snapshot testing. Quello più in linea con la filosofia del team Jest è "Testing with Jest Snapshots: First Impressions". Ben evidenzia tre punti fondamentali:

  1. Gli snapshot test completano i test convenzionali, non li sostituiscono.

  2. Gli snapshot test sono più efficaci con un solido processo di code review.

  3. Gli snapshot test funzionano bene con l'auto-mocking.

Consigliamo vivamente la lettura dell'intero articolo. Ben ha fatto un ottimo lavoro nello spiegare le ragioni che ci hanno portato a sviluppare lo snapshot testing. È importante sottolineare che non abbiamo introdotto questa funzionalità per sostituire altre forme di test, ma per permettere agli sviluppatori di testare codice che altrimenti non verrebbe testato. Funziona bene per componenti React, output CLI, messaggi d'errore e altri casi, ma non risolve tutti i problemi. L'obiettivo di Jest è offrire diverse modalità per scrivere test efficaci senza compromettere performance o manutenibilità.

Altri approfondimenti sullo snapshot testing:

Redux stesso ora utilizza Jest e Max Stoiber ha scritto un tutorial su come testare codice scritto con redux. Esiste anche un'ottima guida su come scrivere test per MobX. Se stai usando create-react-app, Jest è ora incluso di default. Kent C. Dodds ha creato numerosi video su egghead.io che ti aiuteranno a iniziare con Jest.

Se utilizzi altri test runner, Kenneth Skovhus ha sviluppato un'ottima libreria jest-codemods che automatizzerà la conversione per te. I codemod sono fantastici: ti permetteranno di valutare rapidamente se Jest fa al caso tuo. Provatelo!

Il changelog completo è disponibile su GitHub. Jest 16 è stato un vero sforzo collettivo della comunità JavaScript e il progetto conta ora più di 220 contributor. Ringraziamo ognuno di voi per l'aiuto nel rendere questo progetto straordinario.