Saltar al contenido principal

Jest 23: 🔥 Pruebas Rápidas como el Rayo y Agradables

· 8 min de lectura
Ricky Hanlon
Ricky Hanlon
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 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.

Modo interactivo de instantáneas en funcionamiento

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.

Comparadores de propiedades para instantáneas

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:

Comparadores asíncronos personalizados en acción

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.

Comparadores asimétricos personalizados en funcionamiento

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.

jest-each en funcionamiento

¡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

Nuevos matchers en acción

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:

Detectando tests bloqueados

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

Ejecutando detectOpenHandles

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!

Plugin typeahead en acción

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 a jest.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 --onlyChanged y --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.forwardRef y React.createContext.

  • Rastrear valores devueltos y lanzados por mocks: Agrega mock.results que 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:

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.