Jest 25: 🚀 Sentando las bases para el futuro
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Jest 25 está sentando las bases para muchos cambios importantes en el futuro. Por ello, hemos minimizado los cambios disruptivos, aunque las modificaciones internas de arquitectura pueden requerir atención durante la actualización. Los principales cambios incluyen: actualización de JSDOM de v11 a v15, ejecución de pruebas entre 10-15% más rápida, nueva vista de diferencias para snapshots obsoletos y eliminación del soporte para Node 6.
Han habido más de 200 commits desde Jest 24.9 gracias a más de 80 colaboradores diferentes. Como siempre, revisa el registro de cambios (changelog) para ver la lista completa de actualizaciones.
Adiós Node 6
Node 6 alcanzó su fin de vida (EOL) el 30 de abril de 2019, y Jest 25 lo abandona. Eliminar Node 6 nos permite actualizar dependencias, principalmente JSDOM que ahora está en la versión 15. Esto también significa que ya no necesitamos transpilar la sintaxis async-await, lo que resulta en ejecución de código más rápida y menor consumo de memoria. Como beneficio adicional, el código transpilado de Jest será más fácil de depurar si alguien cae en ese agujero de conejo particular.
Aunque Node 8 también alcanzó su fin de vida, Jest 25 mantendrá su soporte para facilitar la transición a quienes aún lo usan. Esto implica algunas compensaciones, como que JSDOM v16 se lanzó sin soporte para Node 8, por lo que necesitarás usar jest-environment-jsdom-sixteen si deseas la última versión.
Mejoras de rendimiento
Recibimos informes sobre lentitud en versiones recientes de Jest. Jest 25 incluye Micromatch actualizado, que ofrece grandes mejoras en tiempo de inicio, junto con correcciones de errores y ajustes que devuelven a Jest la velocidad que tenía en la versión 23. Como mencionamos al inicio, esto representa una reducción del 10-15% en tiempo de ejecución de pruebas. ¡Siempre buscamos mejorar, así que compara el rendimiento con versiones anteriores y reporta problemas si podemos hacerlo mejor!
Cobertura de código con V8
La instrumentación actual de cobertura en Jest usa babel-plugin-istanbul para insertar código de recolección antes de generar reportes. Sin embargo, esto es lento y consume mucha memoria, especialmente en archivos y bases de código grandes. Afortunadamente, V8 incluye cobertura nativa que cada vez funciona mejor en Node gracias al trabajo de Benjamin Coe y otros equipos de V8 y Node.js. Jest 25 añade soporte experimental mediante el nuevo flag --coverage-provider. Consulta su documentación para advertencias y uso.
Pensar rápido y despacio cuando fallan las pruebas
El esfuerzo innecesario para interpretar reportes cuando fallan las pruebas dificulta:
-
"Pensar rápido": reconocer patrones de tu experiencia previa
-
"Pensar despacio": analizar cambios y determinar si son avances esperados o regresiones inesperadas
Jest 25 completa la segunda mitad de un esfuerzo iniciado en Jest 24 para mejorar todos los matchers:
-
Línea descriptiva correcta, incluyendo modificadores
.rejects,.resolvesy.not -
Etiquetas concisas y alineación consistente para valores esperados y recibidos
-
Resaltado invertido de diferencias en subcadenas cuando los valores son strings
-
Conteo de líneas modificadas para identificar si son solo inserciones o eliminaciones
Agradecimiento especial al mantenedor de Jest Mark Pedrotti por liderar este esfuerzo y su trabajo continuo para optimizar los errores en expectativas.
Colores de diferencias cuando fallan pruebas de snapshot
El cambio más evidente para reemplazar confusión con confianza son los colores de las líneas modificadas en las diferencias cuando fallan las pruebas de snapshot:
-
- Snapshotcambia de verde a magenta -
+ Receivedcambia de rojo a verde azulado en primer plano sobre fondo cian/aguamarina
Ejemplos de informes de pruebas de snapshot (antes a la izquierda, después a la derecha)
- El conteo de líneas modificadas confirma tu primera impresión sobre cómo cambió el snapshot (líneas eliminadas o insertadas)

- Los colores de fondo atraen tu mirada para comparar líneas modificadas adyacentes

- Los colores de fondo también te ayudan a identificar qué pruebas
toThrowrequieren decidir si actualizar el snapshot

Estas son las razones principales para elegir colores únicos:
-
El 95% de personas con visión completa de colores puede distinguir rápidamente informes de snapshot versus otros comparadores
-
Resuelve el conflicto entre el significado de verde/rojo en pruebas de Jest versus rojo/verde en revisiones de código
-
A diferencia de rojo/verde que sugiere actualizar como decisión predeterminada, indica que las diferencias requieren revisión cuidadosa para posibles regresiones
La diferencia de tono entre magenta (300°) y verde azulado/cian (180°) mejora la accesibilidad visual, manteniendo contraste consistente en temas claros/oscuros
Si mantienes una herramienta de línea de comandos, encontrarás inspiración para mejorar accesibilidad en #9132
Soporte para módulos ECMAScript
Node 13 tiene soporte ESM sin flags, y hemos comenzado a trabajar en soporte nativo para Jest. Jest 25 incluye compatibilidad con archivos de configuración jest.config.cjs y jest.config.mjs, pero las pruebas aún requieren transformación (Babel/TypeScript) para usar ESM directamente
Las APIs que Jest usará siguen siendo experimentales, así que no esperes soporte inmediato. El equipo de Módulos de Node.js trabaja activamente en estas APIs, y monitorearemos su evolución. Suscríbete a este issue para actualizaciones
Otras mejoras y actualizaciones
-
Jest superó los 1000 contribuidores únicos. ¡Un hito increíble! Gracias a todos quienes hacen las pruebas más agradables
-
Gracias a Josh Rosenstein, Jest ahora soporta
BigInten comparadores comotoBeGreaterThan, entendiendo literales bigint sin configuración adicional -
La función
--detect-leaksestaba rota en Node 12+ - solucionado en Jest 25 -
Como anunciamos para Jest 24, la base de código se reescribió en TypeScript (completado en Jest 24.3), mejorando integración con IDEs. Buscamos mejorar mocks con sistemas de tipos - ¡comparte ideas aquí! Investigaremos mover tipificaciones de DefinitelyTyped a Jest mismo
-
El paquete
jest-diffahora exporta funciones comodiffLinesUnifiedydiffStringsUnifiedcon opciones de configuración, permitiendo que otras aplicaciones formateen diferencias de manera personalizada. Para más información y ejemplos de código, consulta el nuevo archivoREADME.mden el repositorio de Jest o en los repositorios de paquetes. -
Gracias al miembro de la comunidad Wei An Yen, Jest ya no resaltará los matchers asimétricos exitosos en errores de expectativas. Este era un punto de dolor persistente con los matchers asimétricos y estamos encantados de que finalmente esté resuelto.
-
Por segundo año consecutivo, Jest ganó el premio a la Mayor Satisfacción de State of JS. Estamos increíblemente agradecidos por el apoyo de la comunidad, ¡y esperamos aprovechar este impulso para hacer 2020 aún mejor!
Planes para el futuro
-
La configuración de Jest es extensa y algo engorrosa: a menudo hay al menos dos formas de hacer lo mismo, y frecuentemente incluso más. Para Jest 26 esperamos condensar la configuración y hacerla más predecible. Consulta este issue para más detalles.
-
También esperamos poder proporcionar una API programática adecuada para ejecutar Jest, facilitando su integración en IDEs y otras herramientas. Consulta este issue de seguimiento.
-
Hay un PR abierto para añadir Lolex como implementación de los temporizadores falsos de Jest desde diciembre de 2017. Aunque no lo añadiremos a APIs públicas en Jest 25, el soporte técnico está incluido y estamos explorando cómo exponerlo para que la comunidad pueda probarlo y experimentar. Usarlo permite simular
Datey otras funciones de temporización que Jest actualmente no maneja. Nota que esto debe considerarse experimental, y un soporte API adecuado llegará en futuras versiones. Sigue este PR para las últimas actualizaciones.
¡Feliz testing con Jest! 🃏
