Saltar al contenido principal

Jest 11.0

· 5 min de lectura
Traducción Beta No Oficial

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

Hoy anunciamos el cambio a revisiones principales para Jest, siendo Jest 11.0 la primera versión mayor. Jest ha sido utilizado por ingenieros de Facebook y en nuestros sistemas de integración continua durante años, y creemos que Jest ha estado mucho más allá de un "lanzamiento 1.0" desde hace tiempo. Esto es similar a un cambio que el equipo de React implementó.

Si estás usando Jest 0.9 o Jest 0.10, la actualización debería ser transparente. Todos los cambios de los últimos meses se incorporaron en Jest 11.0.

Novedades en Jest 11.0

Integración con Babel y configuración simplificada

babel-jest se adoptó dentro del repositorio recientemente modularizado de Jest y ahora está perfectamente integrado. Si estás actualizando desde una versión anterior de Jest o planeas adoptarlo, te recomendamos leer la guía de inicio.

Anteriormente Jest proporcionaba APIs como jest.dontMock, que desactiva el mock de un módulo que luego se importa usando require. El código de prueba solía verse así:

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

Sin embargo, junto con las declaraciones de importación ES2015 esto dejará de funcionar. Según la especificación, los import se elevan al inicio del bloque de código. Un código escrito así:

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

al ejecutarse, realmente se ejecutaría en este orden:

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

Por lo tanto, el módulo LikeButton quedaría mockeado aunque llamemos explícitamente a dontMock.

Cuando se usan las últimas versiones de Jest y babel-jest juntas, las llamadas a las nuevas APIs jest.unmock, jest.mock, jest.disableAutomock y jest.enableAutomock se elevan al inicio de su bloque, antes de las declaraciones de importación ES2015.

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

Mejoras en el (Auto)Mocking

Hemos realizado numerosas mejoras y correcciones en la función de automocking de Jest, mejorado la compatibilidad con npm3 y añadido nuevas APIs para mocks manuales. Muchos usuarios han expresado su deseo de usar Jest con el automocking desactivado. Se añadió una opción de configuración global automock, que puede establecerse en false.

También hemos añadido dos nuevas APIs para simplificar mocks manuales. jest.mock especifica una fábrica de mocks manuales para una prueba específica:

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

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

Y se añadió jest.fn para facilitar la creación de funciones mock:

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

Rendimiento

Recientemente escribimos sobre algunas mejoras de rendimiento implementadas en Jest. Destacan especialmente las mejoras en tiempo de inicio, y ahora estamos en una posición cómoda respecto al rendimiento.

Mejoras en Jasmine y aserciones

Cuando Jest se publicó como código abierto, incluía Jasmine 1. Jest fue diseñado para funcionar con cualquier librería de aserciones, y el soporte opcional para Jasmine 2 se añadió mediante una contribución externa a finales del año pasado. Este cambio ofrece mejor rendimiento y APIs más sólidas que la versión anterior de Jasmine. Por ello, convertimos todas nuestras pruebas de JavaScript en Facebook a Jasmine 2. Con Jest 11 establecemos Jasmine 2 como opción predeterminada. Jasmine 1 puede activarse mediante la opción de configuración testRunner.

Tambíén realizamos múltiples actualizaciones relacionadas con Jasmine. Se mejoraron los mensajes de error para los comparadores personalizados de funciones mock de Jest, que ahora también funcionarán con spies de Jasmine. Las pruebas omitidas al usar fit o fdescribe, ahora se reportan correctamente al final de la ejecución.

Otros cambios

El comando jest --watch ha sido reescrito y mejorado. Por defecto, ahora solo ejecuta pruebas relacionadas con archivos modificados. Si deseas ejecutar todas las pruebas en cada cambio, puedes usar jest --watch=all. También mejoramos la salida detallada del registro y añadimos advertencias y mensajes de error más útiles. Agregamos una opción de configuración testEnvironment para personalizar el entorno de pruebas. Por ejemplo, al construir un servicio Node, puedes usar un entorno especial node en lugar de jsdom. Finalmente, el sitio web y toda la documentación han sido completamente reescritos.

Todos los cambios de los últimos meses están disponibles en el CHANGELOG.

Contribuciones y el futuro de Jest

En los últimos seis meses, Jest ha recibido contribuciones significativas de numerosos colaboradores nuevos. Quiero agradecer a todos los colaboradores de código abierto y empleados de Facebook por ayudar a mejorar Jest para todos. Nuevos contribuyentes: 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 y ShihChi Huang.

Con su apoyo, esperamos hacer Jest aún mejor en los próximos meses. Actualmente trabajamos en mejoras para pruebas de React (Native), soporte avanzado de cobertura de código, y planeamos abrir el código de nuestro ejecutor interno de pruebas que permite ejecutar múltiples proyectos Jest con un solo comando.