Jest 23: 🔥 Pruebas Rápidas como el Rayo y Agradables
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
¡Hoy nos complace anunciar Jest 23, nuestra mayor versión principal hasta la fecha! Junto con más de 100 colaboradores, hemos lanzado una gran cantidad de funciones y correcciones de errores. Gracias a todos en la comunidad por ayudar a hacer que las pruebas de JavaScript sean agradables.
¡También damos la bienvenida a Babel y webpack a la comunidad de Jest! Tras migrar de Mocha a Jest 23 Beta, webpack redujo el tiempo total de su suite de pruebas 6 veces, pasando de más de 13 minutos a 2 minutos y 20 segundos. #blazingmeansgood
Estos son algunos de los aspectos más destacados y cambios importantes de Jest 23.
Para ver la lista completa, consulta el registro de cambios.
Modo Interactivo de Instantáneas
Hemos añadido una nueva opción predeterminada en el menú de observación llamada Modo Interactivo de Instantáneas. Este modo te permite revisar paso a paso cada instantánea fallida en cada suite con errores, y decidir individualmente si actualizarla o omitirla.

Consulta la documentación del Modo Interactivo de Instantáneas aquí.
Comparadores de Propiedades para Instantáneas
Frecuentemente, los objetos que capturas en instantáneas contienen valores generados como fechas o IDs. Jest ahora te permite pasar propiedades al comparador de instantáneas que especifican la estructura de los datos en lugar de valores concretos. Estos comparadores de propiedades se verifican antes de serializar el tipo de comparador (no el valor), ofreciéndote resultados consistentes en todas las ejecuciones de pruebas.

Consulta la documentación actualizada de toMatchSnapshot aquí o la guía de comparadores de propiedades para más información.
Comparadores Asíncronos Personalizados
¡Ahora admitimos comparadores asíncronos con expect.extends! Los comparadores asíncronos devuelven una Promesa para que puedas usar await hasta que se resuelvan. Por ejemplo:

Documentación disponible aquí.
Comparadores Asimétricos Personalizados
Los comparadores asimétricos son excelentes cuando solo necesitas igualdad asimétrica. Por ejemplo, cuando el lado izquierdo debe ser un objeto con un subconjunto de propiedades del lado derecho, en lugar de una coincidencia exacta. Jest incluye varios comparadores asimétricos listos para usar, y en esta versión presentamos Comparadores Asimétricos Personalizados.

Jest Each
@mattphillipsio ha donado el paquete jest-each a Jest Core (¡gracias Matt!). jest-each es una biblioteca inspirada en mocha-each y Tablas de datos de Spock que te permite definir una tabla de casos de prueba y ejecutar una prueba por cada fila con los valores de columna especificados. Admitimos tanto arrays como literales de plantilla para todas las variantes de describe y test. La documentación está disponible aquí, y para quienes aún no usan Jest 23, seguimos publicando jest-each por separado.

¡Un enorme agradecimiento a Prettier por corregir tan rápido el formato de tablas (ver Prettier 1.13)!
Nuevos Matchers
Solo añadimos matchers al core si creemos que serán útiles para gran parte de la comunidad Jest, dejando la mayoría para la comunidad (ver jest-extended). Algunos matchers califican para el core, y Jest 23 añade:
-
nthCalledWith
-
toReturn
-
toReturnTimes
-
toReturnWith
-
lastReturnedWith
-
nthReturnedWith
-
toStrictEqual

Consulta los docs actualizados de expect aquí.
Depuración de Tests Bloqueados
Un problema común que vemos en el issue tracker son reportes de que "Jest" se bloquea después de ejecutar tests. Esto suele deberse a que el código de aplicación deja handles abiertos, impidiendo que Jest finalice. Antes, los usuarios recurrían a --forceExit (no recomendado).
Para ayudar a depurar estos problemas, ahora detectamos cuando Jest no termina:

Y ofrecemos un nuevo flag --detectOpenHandles para encontrar handles abiertos:

Consulta los docs actualizados de CLI aquí.
Plugins para Modo Watch
Hemos reescrito completamente el sistema de modo watch para permitir plugins personalizados. Ahora los plugins permiten conectarse a eventos de Jest y añadir opciones personalizadas al menú. Todas las opciones predeterminadas se implementan como plugins, y la documentación para crear los tuyos está aquí.
¡Con este cambio también recuperamos la función typeahead como plugin via jest-watch-typeahead!

Consulta jest-watch-typeahead para documentación e instalación. ¡Un enorme agradecimiento a @rogeliog por el nuevo sistema de plugins y este plugin!
Cambios Rompedores
Como en cada versión principal, incluimos cambios rompedores para permitir mejoras futuras y llevar la experiencia de testing al siguiente nivel. Estos son los principales cambios:
-
Requiere descripciones y funciones en tests: Ahora fallan tests que no incluyen ambas.
-
Elimina props undefined de snapshots React: Snapshots más pequeños y comportamiento React adecuado.
-
Elimina deprecaciones: Quitamos mapCoverage (ya innecesario) y
jest.genMockFunction/jest.genMockFn(equivalentes ajest.fn). -
Añade nombres a fallos en snapshots: Incluimos el nombre del snapshot (si existe) en mensajes de error para facilitar su localización.
-
Reemplazo de marcas de tiempo de mock: Reemplazamos las marcas de tiempo de los mocks con invocationCallOrder porque dos o más mocks a menudo pueden tener la misma marca de tiempo, lo que imposibilita probar el orden de llamada.
-
Agregar resultados a las instantáneas de mock: Agregamos los resultados de las llamadas a funciones mock a las instantáneas para que tanto las llamadas como los resultados de la invocación sean rastreados.
Otras mejoras
-
Cobertura en modo de observación: La cobertura ahora se limita solo a los archivos probados en modo de observación o cuando se usan
--onlyChangedy--findRelatedTests. -
Documentación de versiones: Agregamos documentación para cada versión menor desde Jest 22, y hemos eliminado todos los “Requiere Jest X.X+” de la documentación.
-
Mejores resúmenes de instantáneas: Reformamos la salida del Resumen de Instantáneas para que las instantáneas obsoletas sean más informativas.
-
Mejores trazas de la pila: Agregamos trazas de la pila a errores asíncronos, errores de tiempo de espera, expect.assertions y a excepciones que no son errores. ¡También estamos indicando la columna en el marco de código!
-
Mejor soporte para React 16: Agrega soporte de instantáneas para
React.Fragment,React.forwardRefyReact.createContext. -
Rastrear valores devueltos y lanzados por mocks: Agrega
mock.resultsque contiene el valor devuelto o el valor lanzado para cada llamada de mock. -
Ardiente 🔥: Hemos agregado una insignia ardiente al README para indicar que Jest es increíblemente bueno.
Cumbre de Jest
La semana pasada, el equipo central de Jest se reunió en la Cumbre de Jest en Facebook Londres, donde trabajaron y lanzaron Jest 23, anunciaron el Colectivo Abierto de Jest y dieron varias charlas:
-
Christoph Nakazawa – Introducción
-
Aaron Abramov – Escribir pruebas significativas
-
Rick Hanlon II – Pruebas de instantáneas increíblemente rápidas en Jest 23
-
Simen Bekkhus – Mensajes de error encantadores de Jest
-
Matt Phillips – Mejora tu experiencia con Jest usando paquetes de la comunidad
-
Michele Bertoli – Instantáneas para todo
-
Jordan Eldredge – Webamp: Aprender imitando
La charla completa está disponible aquí.
La asistencia fue increíble y pudimos conocer en persona a gran parte de la comunidad de Londres. ¡Gracias a todos los que nos acompañaron y por su continuo apoyo! Estén atentos a nuestra próxima publicación que describirá el Colectivo Abierto de Jest y los planes que tenemos para el futuro.
Como siempre, este lanzamiento no habría sido posible sin ustedes, la comunidad de JavaScript. Estamos increíblemente agradecidos de tener la oportunidad de trabajar juntos para mejorar las pruebas de JavaScript. Si desea contribuir a Jest, no dude en contactarnos en GitHub o en Discord.
