Jest 24: 💅 Rinfrescante, Rifinito e Compatibile con TypeScript
Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →
Oggi siamo lieti di annunciare la prossima release principale di Jest - la versione 24! Sono passati 4 mesi dall'ultima release minore e 8 mesi da Jest 23, quindi questo aggiornamento è importante e offre qualcosa per tutti! I punti salienti includono il supporto nativo per TypeScript grazie all'aggiornamento degli interni di Jest a Babel 7, la risoluzione di problemi persistenti come l'output mancante della console e i problemi di prestazioni nel calcolo di diff complessi, oltre a un nuovissimo sito web scintillante. ✨
Per l'elenco completo di tutte le modifiche, consulta il changelog.
Nuovo Sito Web
@orta ha realizzato un bellissimo redesign del sito web di Jest, implementato dai membri della community @montogeek e @brainkim.
L'obiettivo del redesign era evidenziare maggiormente ciò che rende Jest straordinario e separare l'idea che Jest sia principalmente uno strumento per testare app React - puoi usare Jest con qualsiasi tipo di progetto e vogliamo renderlo evidente. Puoi leggere di più sulle idee alla base del redesign in questo issue.
Supporto per TypeScript
Abbiamo aggiornato internamente a Babel 7 per Jest 24, che include il supporto per progetti TypeScript. Ciò significa che Jest può supportare la transpilazione di TypeScript out of the box, purché configuri Babel per utilizzarlo con @babel/preset-typescript. Un caveat del supporto TypeScript predefinito, simile a Flow, è che Babel rimuoverà solo le annotazioni di tipo per rendere il tuo codice JavaScript valido. Non eseguirà il type checking del codice.
Sebbene Jest supportasse Babel 7 già dalla versione 22 rilasciata a dicembre 2017, richiedeva l'uso di un modulo bridge per integrare il supporto di Jest per Babel 6. In Jest 24 siamo migrati completamente a Babel 7, grazie all'aiuto del membro della community @milesj. Ciò rende la configurazione più semplice e permette di sfruttare altre funzionalità di Babel 7, come il caricamento della configurazione e la transpilazione automatica dei modules. Assicurati di rimuovere babel-core@^7.0.0-bridge.0 poiché non è più necessario.
Se vuoi eseguire controlli di tipo durante i test, dovresti usare ts-jest. Dovrai configurare il transformer, poiché Jest applica predefinitamente Babel ai file .ts (e .tsx). In alternativa, puoi eseguire tsc o persino usare un runner Jest per transpilare il tuo TypeScript mentre esegui i test! Consulta jest-runner-tsc per maggiori informazioni.
Vedi la documentazione per maggiori dettagli.
Se per qualsiasi motivo non puoi aggiornare a Babel 7, puoi comunque usare Jest 24 con babel@6 purché mantieni babel-jest alla versione 23.
test.todo
Jest 23 aveva introdotto una modifica che faceva generare errori ai test privi di implementazione anziché saltarli. Questo cambiamento è stato fatto in risposta a feedback secondo cui i test saltati accidentalmente erano difficili da individuare. Tuttavia, questa modifica ha interrotto il flusso di lavoro di molti sviluppatori che usavano la funzione per abbozzare quali test scrivere.
In Jest 24, affrontiamo questo problema aggiungendo un esplicito test.todo (ispirato all'eccellente AVA), che verrà stampato separatamente nel riepilogo dei test. Ti permette di abbozzare rapidamente quali test vuoi scrivere e in futuro, una regola di ESLint potrebbe persino avvisarti se hai dimenticato di implementare alcuni test.
test.todo('invalid input should throw');
test.todo('missing options should be normalized');

Miglioramenti nei messaggi di asserzione
Quando i test falliscono, è necessario prendere decisioni rapide e precise per distinguere tra cambiamenti attesi e regressioni inaspettate. È particolarmente importante non trascurare alcune regressioni nascoste tra molti progressi. Jest 24 rende i report di asserzioni fallite più chiari e concisi per diversi matcher. Poiché il lavoro continuerà in Jest 25, potreste notare alcune temporanee incoerenze. Se i vostri test non falliscono mai, non li vedrete - per tutti gli altri, sarà più semplice debugare i problemi. Un ringraziamento speciale a @ittordepam e agli altri contributori della community.
Potete osservare questi cambiamenti in queste PR: 7621, 7557, 7448, 7325, 7241, 7152, 7125, 7107, 6961.
Esempi:
Asserzione fallita

Disallineamento di tipo

Funzione mock non chiamata

Risoluzione di problemi pregressi
In questa release abbiamo risolto un paio di problemi molto vecchi.
Il primo che vogliamo evidenziare riguarda la scomparsa degli statement console.log. Jest intercetta e raccoglie tutti i log per fornirvi stack trace e renderli disponibili ai reporter. Tuttavia, questo causava problemi in alcuni edge case dove semplicemente sparivano. Fortunatamente per Jest 24, @spion ha risolto questo problema. Grazie mille!
Il secondo riguarda un problema di esaurimento memoria quando le differenze tra valori attesi e ricevuti coinvolgono enormi quantità di modifiche (sia per errori nei test che per difetti nel serializer). @ittordepam ha sostituito l'algoritmo di diffing precedente con il pacchetto diff-sequences, che risolve il problema utilizzando il minimo teorico di memoria. Ciò apre la possibilità a diff per parole in futuro, simili a quelli di git. Date un'occhiata a questa PR e contattateci se volete contribuire!
Altre novità
-
Miglioramenti per
globalSetupeglobalTeardown: la trasformazione del codice ora si applica anche a loro come persetupFiles, e sono supportati neiprojects. -
Potete configurare la posizione degli snapshot, utile per strumenti che integrano Jest in processi di build complessi.
-
Una particolarità della CLI di Jest è stata che mentre alcuni flag e opzioni usavano il camel case (come
runInBand), altri no (comeno-cache). In Jest 24 entrambe le forme sono riconosciute, quindi puoi scrivere gli argomenti CLI come preferisci. -
Abbiamo rinominato
setupTestFrameworkScriptFileinsetupFilesAfterEnve lo abbiamo trasformato in un array. Speriamo che questo renda più chiaro lo scopo dell'opzione. Abbiamo in programma un'ulteriore revisione della configurazione nella prossima major (vedi paragrafo nella sezione successiva). -
Per ridurre la "magia" che Jest applica per "funzionare subito™", in questa release abbiamo deciso di rimuovere l'iniezione automatica di
regenerator-runtime, talvolta usato nel codice asincrono compilato. Includereregenerator-runtimenon è sempre necessario e riteniamo sia responsabilità dell'utente includerlo se necessario. Se usi@babel/preset-envcontargetsimpostato su una versione moderna di Node (es. Node 6+), non dovrai includerlo. Consulta la nostra documentazione Using Babel per maggiori dettagli. -
Node.js 10 ha introdotto un modulo sperimentale chiamato
worker_threads, simile ai Worker thread del browser.jest-worker, parte della Jest platform, potrà utilizzareworker_threadsse disponibile invece dichild_process, rendendolo ancora più veloce! I benchmark mostrano un miglioramento del 50%. Essendo sperimentale, non è abilitato quando Jest funge da test runner, ma puoi già usarlo nei tuoi progetti! Lo abiliteremo di default quando verrà promosso da stato sperimentale in Node.js.
Modifiche di Rottura
Sebbene tutte le modifiche incompatibili siano elencate nel changelog, eccone alcune degne di nota:
-
Abbiamo aggiornato a Micromatch 3. Pur non riguardando tutti gli utenti, questa versione è più rigorosa nel parsing dei glob rispetto alla v2 usata in Jest 23. Consulta questo e gli issue collegati per esempi di glob non validi in caso di problemi.
-
Abbiamo rimosso i residui di codice necessari per Node 4. Precedentemente era tecnicamente possibile eseguire Jest 23 su Node 4, ma ora non è più possibile senza polyfill e transpilazione.
-
Modifiche alla serializzazione delle funzioni mock negli snapshot - verifica attentamente i tuoi snapshot dopo l'aggiornamento. PR correlata.
-
Jest non inietta più automaticamente
regenerator-runtime- se incontri errori relativi, configura Babel per transpilare correttamente le funzioniasyncusando ad esempio@babel/preset-env. PR correlata.
Il futuro
Siamo profondamente onorati dai risultati del State Of JS 2018, dove Jest ha vinto il premio "Highest Satisfaction". Un altro traguardo importante del 2018 è stato il superamento, a ottobre, dei 2 milioni di download settimanali per la prima volta. Grazie.
Siamo grati per la fiducia che la comunità ci ha dimostrato e intendiamo consolidarla. Ci assicureremo che Jest 24 e le release future continuino a costruire su queste solide fondamenta, rimanendo uno strumento essenziale nel toolkit degli sviluppatori JavaScript.
Questa è stata la prima release in cui abbiamo sperimentato l'idea di utilizzare i fondi del nostro Open Collective per creare bug bounty. Questo approccio ha funzionato bene per coinvolgere sviluppatori non core nell'implementazione della nuova landing page, e siamo ottimisti per un bug di lunga data in cui i globali di Jest non corrispondono a quelli di Node. Vorremmo fare di più: se avete un bug che ritenete un buon candidato per il nostro programma di bounty, fatecelo sapere. Nel frattempo, potete trovare tutti i ticket con un bounty tramite l'etichetta dedicata.
Abbiamo già iniziato a pianificare la prossima release di Jest 25, con la funzionalità più attesa che sarà una revisione completa della nostra configurazione, attualmente piuttosto complessa da comprendere principalmente a causa di opzioni sovrapposte e della combinazione di glob e espressioni regolari. I feedback su come vorreste che apparisse la configurazione di Jest sono ben accetti e possono essere inviati in questa issue.
Potreste anche aver sentito che stiamo pianificando di migrare la codebase da Flow a TypeScript. Speriamo che questa migrazione permetta a ancora più contributori di unirsi a noi per rendere il 2019 un anno ancora migliore per il testing JavaScript. 🚀 Il piano è di implementare questa modifica in una minor release nel prossimo futuro. I feedback su questa scelta possono essere aggiunti nella RFC.
Infine, se vi siete mai chiesti come è costruito Jest, @cpojer ha registrato un video con una panoramica architetturale sul funzionamento interno di Jest. Sentitevi liberi di contattarci se avete ulteriori domande al riguardo. Il video è disponibile sul nostro sito web.
Buon testing! 🃏
