Jest 11.0
Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →
Oggi annunciamo il passaggio a revisioni maggiori per Jest, con Jest 11.0 come prima release principale. Jest è stato utilizzato dagli ingegneri di Facebook e nei nostri sistemi di integrazione continua per anni e riteniamo che abbia superato da tempo lo stato di "release 1.0". Questo cambiamento è simile a quanto ha fatto il team di React.
Se stai utilizzando Jest 0.9 o Jest 0.10, l'aggiornamento dovrebbe essere trasparente. Tutte le modifiche degli ultimi mesi sono state incluse in Jest 11.0.
Novità in Jest 11.0
Integrazione con Babel e configurazione semplificata
babel-jest è stato integrato nel nuovo repository modulare di Jest e ora funziona perfettamente con Jest. Se stai aggiornando da una versione precedente di Jest o vuoi iniziare a utilizzarlo, ti consigliamo di leggere la guida introduttiva.
In precedenza Jest forniva API come jest.dontMock che rimuoveva il mock di un modulo successivamente importato con require. Il codice di test tipicamente appariva così:
jest.dontMock('LikeButton');
const LikeButton = require('LikeButton'); // LikeButton is unmocked
Tuttavia, con le istruzioni import di ES2015 questo approccio non funziona più. Secondo le specifiche gli imports vengono elevati all'inizio del blocco di codice. Un codice scritto così:
jest.dontMock('LikeButton');
import LikeButton from 'LikeButton';
quando eseguito, verrebbe effettivamente eseguito in quest'ordine:
import LikeButton from 'LikeButton'; // This happens before the dontMock call.
jest.dontMock('LikeButton');
Il modulo LikeButton verrebbe quindi mockato nonostante la chiamata esplicita a dontMock.
Quando vengono utilizzate insieme le versioni più recenti di Jest e babel-jest, le chiamate alle nuove API jest.unmock, jest.mock, jest.disableAutomock e jest.enableAutomock vengono elevate all'inizio del loro blocco, prima delle istruzioni import ES2015.
jest.unmock('LikeButton');
import LikeButton from 'LikeButton'; // LikeButton is properly unmocked!
Miglioramenti al (Auto)Mocking
Abbiamo apportato numerosi miglioramenti e correzioni alla funzionalità di automocking di Jest, migliorato il supporto per npm3 e aggiunto nuove API per il mocking manuale. Molti utenti hanno espresso il desiderio di utilizzare Jest disabilitando l'automocking. È stata aggiunta un'opzione di configurazione globale automock impostabile su false.
Abbiamo inoltre aggiunto due nuove API per semplificare i mock manuali. jest.mock specifica una factory di mock manuali per un test specifico:
// Implement a mock for a hypothetical "sum" module.
jest.mock('sum', () => {
return (a, b) => a + b;
});
const sum = require('sum');
sum(1, 4); // 5
E jest.fn è stato aggiunto per semplificare la creazione di funzioni mock:
// Create a mock function
const mockFn = jest.fn(() => 42);
mockFn(); // 42
expect(mockFn.calls.length).toBe(1);
Prestazioni
Recentemente abbiamo descritto alcuni miglioramenti prestazionali apportati a Jest. Soprattutto, i tempi di avvio sono stati ottimizzati e ora ci troviamo in una posizione confortevole riguardo alle prestazioni.
Miglioramenti a Jasmine e alle asserzioni
Quando Jest è stato open source, includeva Jasmine 1. Jest è stato progettato per funzionare con qualsiasi libreria di asserzioni e il supporto opzionale per Jasmine 2 è stato aggiunto tramite un contributo esterno alla fine dello scorso anno. Questo cambiamento offre prestazioni migliori e API più avanzate rispetto alla precedente versione di Jasmine. Di conseguenza, abbiamo convertito tutti i nostri test JavaScript in Facebook a Jasmine 2. Con Jest 11 rendiamo Jasmine 2 la nuova impostazione predefinita. Jasmine 1 può essere abilitato tramite l'opzione di configurazione testRunner.
Abbiamo anche apportato molti aggiornamenti relativi a Jasmine. I messaggi di errore per i matcher personalizzati delle funzioni mock di Jest sono stati migliorati e ora funzionano anche con gli spy di Jasmine. I test saltati quando si utilizzano fit o fdescribe, vengono ora correttamente segnalati al termine dell'esecuzione.
Altre modifiche
Il comando jest --watch è stato completamente riscritto e migliorato. Ora di default esegue solo i test relativi ai file modificati. Se desideri eseguire tutti i test ad ogni modifica, puoi usare jest --watch=all. Anche l'output del logger verboso è stato migliorato e abbiamo aggiunto messaggi di avviso e di errore più utili. Abbiamo introdotto l'opzione di configurazione testEnvironment per personalizzare l'ambiente di test. Ad esempio, quando si sviluppa un servizio Node, è possibile utilizzare un ambiente node dedicato invece di jsdom. Infine, il sito web e tutta la documentazione sono stati completamente riscritti.
Tutte le modifiche degli ultimi mesi sono disponibili nel CHANGELOG.
Contributi e futuro di Jest
Negli ultimi sei mesi, Jest ha ricevuto modifiche significative da un enorme numero di nuovi contributori. Desidero ringraziare tutti i collaboratori open source e i dipendenti di Facebook per il loro aiuto nel rendere Jest migliore per tutti. Nuovi contributori: 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 e ShihChi Huang.
Con il vostro supporto, non vediamo l'ora di rendere Jest ancora migliore nei prossimi mesi. Stiamo attualmente lavorando al miglioramento dei test per React (Native), a un supporto avanzato per la code coverage e pianifichiamo di open-sourciare il nostro test runner interno che consente l'esecuzione di più progetti Jest con un singolo comando di esecuzione.
