Arte Digital NFT

Lecciones aprendidas al actualizar user-event de testing-library a la versión 14 en Kibana

Arte Digital NFT
Lessons learned from upgrading testing-lib's user-event to v14 in Kibana

La actualización de una biblioteca fundamental en un proyecto tan grande como Kibana puede revelar retos inesperados, desde cambios en la API hasta problemas de rendimiento. Exploramos las experiencias y aprendizajes obtenidos al migrar user-event de testing-library a su versión 14 dentro de Kibana, destacando estrategias para enfrentar obstáculos comunes y optimizar el flujo de pruebas en aplicaciones grandes.

Kibana es conocido por ser uno de los monorepositorios públicos más grandes en GitHub, con más de tres millones de líneas de código en TypeScript y una comunidad activa que supera los 150 contribuyentes mensuales. Mantener un proyecto de esta magnitud implica una batería continua de actualizaciones, mejoras y mantenimiento, incluyendo la importante tarea de mantener las dependencias externas al día. La actualización de @testing-library/user-event de la versión 13 a la 14 representa un ejemplo claro de los desafíos y aprendizajes que emergen al integrar nuevos paradigmas en un ecosistema tan extenso. Esta actualización no fue algo trivial. Afectó 401 archivos e implicó más de cinco mil inserciones y casi cinco mil eliminaciones, lo que requirió la revisión y aprobación de más de veinte equipos responsables de distintas partes del código.

A pesar de que la versión 14 fue lanzada en marzo de 2022, la incorporación a Kibana no se efectuó hasta septiembre de 2024, lo que evidencia la realidad del tech debt o deuda técnica en proyectos de gran escala. Más allá de modernizar una dependencia, esta experiencia pone sobre la mesa la gestión de mantenimiento técnico y cómo las actualizaciones pueden convertirse en una labor tan compleja como necesaria. Uno de los cambios más significativos en user-event v14 fue la introducción de métodos que retornan promesas. Esto obliga a que las llamadas a funciones como click, type o keyboard sean aguardadas mediante await, modificando patrones de escritura en los tests que, hasta entonces, ejecutaban de manera síncrona. Este cambio trajo consigo además una revisión profunda en la forma en que se manejan los eventos de puntero, reemplazando configuraciones anteriores por nuevas formas de saltarse algunas validaciones que son ahora más estrictas y realistas en términos de la interacción del usuario con la interfaz.

La manera en que los eventos de propagación y burbujeo se comportan ahora es más fiel al comportamiento real del navegador. Esto supuso un doble filo: por un lado, mayor precisión en las pruebas; por otro, la aparición de bugs ocultos que se manifestaron al contrastar con los test existentes. Estos descubrimientos obligaron a revisar y ajustar una gran cantidad de casos para asegurar la coherencia y robustez en las pruebas de interacción. Entre los desafíos más inesperados estuvo la ralentización notable en el rendimiento del conjunto de pruebas. Los test que implicaban escritura o tipeo se volvieron significativamente más lentos, generando incluso timeouts que no se habían presentado con versiones anteriores.

Este problema no es exclusivo de Kibana, sino que ha sido reportado en otras comunidades que han efectuado la misma migración a la versión 14. Para mitigar el impacto en la velocidad, se implementaron diferentes soluciones. La desactivación de la demora artificial al escribir mediante la configuración { delay: null } resultó efectiva para optimizar tiempos. Asimismo, limitar la profundidad de las verificaciones de eventos puntero mediante pointerEventsCheck se tradujo en una aceleración importante en la ejecución de ciertos eventos como click. En casos críticos, se recurrió temporalmente a fireEvent, una alternativa menos realista pero más rápida, para no bloquear el avance del desarrollo.

Los mantenedores de la biblioteca subrayan que priorizar la simulación de un comportamiento realista del usuario es una elección deliberada, aunque ello implique sacrificios en la velocidad de las pruebas. En el contexto de grandes bases de código, esto se traduce en la necesidad de ajustar los tiempos de espera y repensar la manera en que se realizan ciertas pruebas, especialmente en componentes con formularios complejos y flujos de interacción extensos. Este efecto colateral tiene además costos organizativos, pues incrementa el tiempo total que se invierte en las ejecuciones de CI y ralentiza el ciclo de desarrollo. La complejidad no termina en el rendimiento. La migración en sí misma constituyó un arduo proceso manual.

En un ambiente con miles de pruebas escritas bajo antiguos patrones, un codemod automatizado resultó insuficiente para cubrir todos los casos límite, particularmente en contextos personalizados y test harnesses específicos implementados por distintos equipos. Este proceso implicó cambiar estructuras fundamentales en los tests. Ejemplos claros incluyen la conversión de llamadas sin await a versiones que ahora requieren espera explícita para resolverse, el ajuste en los parámetros de funciones para adaptarse a nuevas opciones ligadas a la gestión de eventos, así como modificaciones en la manera de esperar la desaparición de elementos en pantalla, moviéndose de utilidades especializadas a bloques await que contienen expectativas dentro de funciones de espera. Otra transformación relevante estuvo ligada al manejo de eventos de teclado, cuya sintaxis fue actualizada para alinearse mejor con los estándares. También se eliminó la necesidad de envolver las llamadas de eventos en act, ya que las funciones ahora se responsabilizan automáticamente de gestionar el ciclo de vida necesario para la actualización del DOM y la sincronización con React.

El API para eventos de pegar sufrió una revisión importante. Anteriormente, se podía pegar directamente sobre un elemento con un solo llamado, pero con la versión 14, se debe primero simular un click para focalizar el elemento y luego invocar la acción de pegar. Esto representa un cambio en la filosofía de la simulación de interacción, más fiel a lo que sucede en un navegador real. Todo este proceso brindó una oportunidad invaluable para revisar y aprender de una evolución natural en las prácticas de testing. La mirada arqueológica hacia años de patrones escritos por múltiples equipos permitió identificar áreas donde el código podía ser modernizado y estandarizado.

Más allá de las dificultades técnicas, el esfuerzo fue altamente valorado por la comunidad interna, incrementando la calidad y mantenibilidad del proyecto a largo plazo. Aunque la experiencia haya sido ardua, refleja un escenario común en proyectos de gran escala: la actualización de dependencias esenciales no es sólo un reto técnico, sino también organizacional y cultural. La lección principal consiste en prepararse para una transición que puede requerir ajustes en múltiples capas, desde la tecnología hasta las prácticas de equipo y los tiempos de ejecución. El impacto de esta actualización no solo se limita a Kibana o su equipo de desarrolladores. Muchos proyectos que aún utilizan versiones anteriores de user-event podrían encontrar útiles estas experiencias para anticipar problemas o planificar su propia migración con mayores chances de éxito.

La reflexión sobre el equilibrio entre realismo en las pruebas y eficiencia en el pipeline puede conducir a nuevas estrategias que combinen ambas necesidades de manera más efectiva. En definitiva, la actualización de user-event a su versión 14 en Kibana ejemplifica las complejidades de mantener un ecosistema de pruebas estable y eficiente en aplicaciones grandes y dinámicas. Este caso destaca la importancia de documentar los desafíos, compartir aprendizajes y continuar evolucionando las herramientas y métodos para mantener la calidad en el desarrollo de software moderno.

Trading automático en las bolsas de criptomonedas Compra y vende tu criptomoneda al mejor precio

Siguiente paso
Show HN: Godot's Most Powerful Scripting Language
el lunes 09 de junio de 2025 TypeScript en Godot: El Lenguaje de Scripting Más Potente para el Desarrollo de Juegos

Explora cómo la integración de TypeScript en Godot transforma la creación de juegos mediante características avanzadas como auto-completado contextual, seguridad de tipos superior y soporte multiplataforma, revolucionando el ecosistema de desarrollo con GodotJS.

Jim Cramer on ServiceNow, Inc. (NOW) CEO Bill McDermott: ‘Credit to Him, He’s Picked Up a Huge Number of Accounts’
el lunes 09 de junio de 2025 Jim Cramer destaca a Bill McDermott por el crecimiento de ServiceNow y su impacto en el mercado tecnológico

Jim Cramer analiza el desempeño de ServiceNow bajo la dirección de Bill McDermott, resaltando su éxito en la captación de cuentas y el posicionamiento de la compañía en el competitivo sector tecnológico, en un contexto de reactivación del interés por la inteligencia artificial y desafíos geopolíticos.

Lloyd Sadd merges with Iridium Risk Services
el lunes 09 de junio de 2025 Fusión Estratégica en Canadá: Lloyd Sadd e Iridium Risk Services Unen Fuerzas para Fortalecer el Mercado de Seguros en el Oeste del País

La unión entre Lloyd Sadd Insurance Brokers e Iridium Risk Services marca un hito en el sector de corredurías de seguros en Canadá, ampliando la gama de servicios disponibles para clientes en Alberta y el oeste canadiense, reforzando la experiencia técnica y promoviendo soluciones innovadoras en seguros, beneficios y gestión patrimonial.

Corcept Therapeutics price target lowered to $135 from $150 at Truist
el lunes 09 de junio de 2025 Corcept Therapeutics: Ajuste a la Baja en el Precio Objetivo de las Acciones Según Truist

Corcept Therapeutics experimenta una reducción en su precio objetivo por parte del analista Truist, quien mantiene una calificación de compra a pesar de ciertas preocupaciones sobre la demanda y los ingresos recientes de la compañía.

Well-Known Tech Analyst Suggests That He’s Somewhat Worried About AAPL’s Outlook
el lunes 09 de junio de 2025 Perspectivas Inciertas para Apple: Un Analista Tecnológico Reputado Expresa Su Preocupación

Un reconocido analista tecnológico comparte sus inquietudes sobre el futuro financiero de Apple, focalizando principales desafíos y oportunidades que enfrenta la compañía en un mercado tecnológico en constante cambio.

On Semi price target lowered to $43 from $52 at Truist
el lunes 09 de junio de 2025 On Semiconductor enfrenta ajuste en su precio objetivo tras revisión de Truist

El precio objetivo de On Semiconductor fue reducido de 52 a 43 dólares por el analista Truist, reflejando desafíos en el mercado automotriz y el impacto de las tarifas, a pesar de resultados positivos en ingresos y ganancias recientes.

Navitas Semiconductor price target lowered to $3 from $4 at Needham
el lunes 09 de junio de 2025 Navitas Semiconductor: Revisión a la Baja en el Precio Objetivo Según Needham

Navitas Semiconductor enfrenta una reducción en su precio objetivo por parte de Needham, aunque mantiene una calificación de compra. Las razones incluyen la volatilidad comercial y retrasos en oportunidades clave, afectando las perspectivas de crecimiento de la empresa.