Pruebas: Haz más con menos

This ad is not shown to multipass and full ticket holders
JSNation US
JSNation US 2025
November 17 - 20, 2025
New York, US & Online
See JS stars in the US biggest planetarium
Learn More
In partnership with Focus Reactive
Upcoming event
JSNation US 2025
JSNation US 2025
November 17 - 20, 2025. New York, US & Online
Learn more
Bookmark
Rate this content

¿Cómo puedes tener la confianza de que tu código está bien probado? Para mí, los criterios son sencillos: te sientes cómodo desplegándolo automáticamente en producción un viernes por la noche, y el flujo de lanzamiento se mantiene tan verde como un árbol perenne. En esta charla, compartiré algunos enfoques que estoy siguiendo para alcanzar ambos objetivos en aplicaciones Node.js (APIs, BFFs, etc).

This talk has been presented at JSNation 2024, check out the latest edition of this JavaScript Conference.

Eugene Fidelin
Eugene Fidelin
27 min
13 Jun, 2024

Comments

Sign in or register to post your comment.
  • Eugene Fidelin
    Eugene Fidelin
    eBay, Engineering manager
    Slides: https://www.slideshare.net/slideshow/testing-do-more-with-less-jsnation-2024/269740608
Video Summary and Transcription
Esta charla se centra en enfoques prácticos para probar aplicaciones Node.js, incluyendo el uso de métricas Dora y la estrategia del trofeo de pruebas. Se enfatiza la importancia de cubrir flujos críticos con pruebas de integración y de extremo a extremo, teniendo en cuenta también el costo y la velocidad de diferentes tipos de pruebas. El ponente recomienda simular servicios de terceros y utilizar pruebas de instantáneas, pero advierte sobre el potencial de falsos positivos. Se sugiere Playwright como herramienta preferida, y se enfatiza la importancia de la ejecución automatizada de pruebas.
Available in English: Testing: Do More With Less

1. Introducción a las pruebas de aplicaciones Node.js

Short description:

Mi charla trata sobre hacer más con menos en las pruebas, y será un enfoque práctico sobre cómo puedes probar tu aplicación Node.js. Pero antes de que muchos equipos lleguen a eso, pueden responder sí a estas preguntas, necesitan pasar por algunos caminos e implementar algunas cosas. Entonces, ¿cómo te aseguras de que estás avanzando en la dirección correcta? Para eso existen las llamadas métricas Dora, que significa investigación y algo de DevOps. Tiene cuatro métricas clave, y tres de ellas se ven directamente afectadas por las buenas pruebas.

Hola a todos. Gracias por venir. Mi charla trata sobre hacer más con menos en las pruebas, y será un enfoque práctico sobre cómo puedes probar tu aplicación Node.js.

Primero, intenta responder la pregunta de si tu código está bien probado. Pero sé honesto. ¿Te sientes cómodo desplegándolo automáticamente un viernes por la noche y simplemente irte a casa? ¿Quién puede levantar la mano? Genial. Tenemos algunas personas valientes aquí en la sala. Bueno. Pero, ¿tu canal de lanzamiento siempre se mantiene tan verde como tu árbol de Navidad? También es importante. Eso está genial, chicos. Tal vez la próxima vez hagamos una charla juntos. Aprenderé de ustedes.

Pero antes de que muchos equipos lleguen a eso, pueden responder sí a estas preguntas, necesitan pasar por algunos caminos e implementar algunas cosas. Entonces, ¿cómo te aseguras de que estás avanzando en la dirección correcta? Para eso existen las llamadas métricas Dora, que significa investigación y algo de DevOps. Básicamente te ayuda a entender qué tan bueno es tu equipo o la empresa en términos de rendimiento y velocidad, es decir, qué tan bueno eres en lanzar software.

Tiene cuatro métricas clave, y tres de ellas se ven directamente afectadas por las buenas pruebas. La primera es la frecuencia de despliegue. Básicamente mide con qué frecuencia tu equipo despliega con éxito en producción. Puedes imaginar que si aún tienes pruebas manuales, espero que no, pero algunas compañías aún tienen pruebas manuales, no puedes desplegar con mucha frecuencia. Probablemente despliegues una vez cada dos semanas o una vez al mes. Idealmente, deberías desplegar bajo demanda. El tiempo de entrega para el cambio. Las pruebas también tienen un gran impacto en esta métrica, porque incluso si tienes pruebas automatizadas, imagina que tienes pruebas de extremo a extremo muy inestables y lentas. Esto significa que cada vez que haces push al master, cada vez que tu canal de despliegue comienza, puede llevarte horas, y si falla, puede llevarte días o incluso semanas obtener un canal de despliegue en verde. Nuevamente, eres muy lento. Y por último, pero no menos importante, donde las pruebas juegan un papel importante es la tasa de fallos en los cambios. Básicamente mide con qué frecuencia tu despliegue causa algún problema en producción, y tiene una conexión directa con la cobertura de pruebas. Pero no la cobertura de pruebas como mides, oh, el 80% de mis líneas están cubiertas. Estoy feliz. No. Esta es la cobertura real.

2. Optimización de la Cobertura de Pruebas y Enfoques

Short description:

El trofeo de pruebas te ayuda a enfocarte en escribir las pruebas correctas. Las pruebas unitarias tienen un costo bajo y una velocidad alta, mientras que las pruebas de extremo a extremo tienen un costo alto y una velocidad baja. Las pruebas de integración brindan una buena confianza a un costo moderado. Comienza escribiendo pruebas de integración y considera escribir pruebas unitarias para casos específicos. Habla con tu equipo de negocios y de productos para identificar flujos críticos.

¿Estás probando las cosas correctas? ¿Estás cubriendo los flujos que aportan más valor a la empresa? Entonces, ¿cómo puedes abordar tus pruebas, cómo puedes escribir menos pruebas y obtener una mayor confianza? Así que, nuevamente, supongo que al menos has escuchado, o incluso tal vez ya estás aplicando el trofeo de pruebas. Se promueve y se hizo popular después de que Kent C. Dodds, creo, escribiera un artículo al respecto y ahora imparte capacitaciones al respecto. Pero básicamente, la idea principal del trofeo de pruebas es ayudarte a enfocarte en escribir las pruebas correctas. Si ves que cada prueba tiene su costo y te brinda cierto nivel de confianza, y tiene cierta velocidad.

Entonces, las pruebas unitarias tienen un costo muy bajo, ¿verdad? Es muy fácil escribir pruebas unitarias, especialmente hoy en día que tenemos GPT, puedes preguntar y generará pruebas unitarias automáticamente. Te brindan, diría yo, una confianza promedio porque si solo tienes pruebas unitarias, es posible que no sea suficiente para implementar automáticamente, pero la velocidad es muy alta. Puedes ejecutarlas más rápido. Por otro lado, las pruebas de extremo a extremo. El costo para ellas es muy alto porque no solo es el costo de escribir la prueba de extremo a extremo, sino también mantenerla a largo plazo. Necesitas una infraestructura especial, necesitas un entorno especial donde debes ejecutarlas, ese entorno debe ser estable. Pero te brinda una confianza muy alta. Si tu prueba de extremo a extremo está en verde, tienes mucha confianza de que todo funciona como se espera, pero la velocidad es baja, ¿verdad? En algún punto intermedio están las pruebas de integración. El costo para ellas es muy similar al de las pruebas unitarias, te brindan una muy buena confianza. Diría que, en mi experiencia, solo tener pruebas de integración a veces es suficiente y puedes prescindir de las pruebas de extremo a extremo y su velocidad sigue siendo alta. Y puedes ver que en este trofeo de pruebas, se enfatiza que la cantidad de pruebas de integración debe superar la cantidad de pruebas de extremo a extremo y pruebas unitarias.

Entonces, ¿cómo abordas esto? Paso número cero. ¿Recuerdas? Puedes habilitar linters estáticos y verificaciones de tipo. Es gratis, ¿verdad? Todos deberían hacerlo. Paso número uno. Comienzas escribiendo pruebas de integración. Intentas escribir pruebas de integración para cada flujo feliz y no feliz. Luego verificas la cobertura de tus pruebas. Identificas, ok, tal vez hay algunos casos de borde para los cuales no tiene sentido escribir una prueba de integración, puedes escribir una prueba unitaria para cubrirlos. O tal vez dentro de tu aplicación, hay algún código reutilizable que utilizas en varias partes. Entonces, tal vez lo consideres como una biblioteca. Entonces, también tiene sentido escribir pruebas unitarias para eso. Y por último, en términos de pruebas, habla con tu equipo de negocios, habla con tu producto. Pídeles que identifiquen los flujos críticos para el negocio.

3. Arquitectura de Pruebas de Aplicaciones Node.js

Short description:

Cubre los flujos críticos para el negocio con pruebas de extremo a extremo. Asegura la observabilidad en producción con métricas, registro y seguimiento de eventos. Esta charla se centra en las pruebas de aplicaciones Node.js y en la arquitectura típica. Las pruebas unitarias cubren partes pequeñas, pero las pruebas de integración abordan las interacciones entre los componentes.

Entonces, los flujos que, si no funcionan, la empresa pierde millones por segundo. Y solo cubre esos flujos críticos para el negocio con pruebas de extremo a extremo. Y luego, seamos honestos, no todo es posible de probar. Aún así, necesitas tener una buena observabilidad en producción. Debes tener métricas, debes tener registro, debes hacer un seguimiento de tus eventos, como eventos de productos. Así puedes identificar de inmediato cualquier anormalidad si implementas algo incorrecto.

En esta charla, nos vamos a enfocar en los pasos uno, dos y tres. Como dije, esta charla se centra en las pruebas de aplicaciones Node.js. Esta es la arquitectura o estructura típica de una aplicación Node.js, cómo funciona. Tienes un navegador, tienes una aplicación del lado del cliente que se ejecuta en el navegador. Realiza una solicitud. La solicitud pasa por una infraestructura en la nube que realiza algunas cosas como la terminación HTTPS, tal vez autenticación, límite de velocidad, muchas cosas. Y luego la solicitud llega a tu aplicación Node.js. Digamos que es una aplicación Express. Tienes una cadena de middlewares que analiza y enriquece la solicitud. Por lo general, tienes, los llamo middlewares de infraestructura. Esos middlewares que realmente no pertenecen a tu aplicación, pero simplemente hacen posible que tu aplicación se ejecute en el entorno. ¿Entiendes? Hacen muchas cosas como analizar las solicitudes entrantes, autenticar al usuario, tal vez habilitar la localización, y así sucesivamente. Y luego, finalmente, la solicitud llega al código, al recuadro blanco, en realidad al código que escribiste, al código que contiene la lógica del negocio. Y este código necesita obtener datos de algún lugar para hacer algunas manipulaciones, ¿verdad? Realiza una serie de llamadas a la API o tal vez llamadas directas a la base de datos. Esas llamadas a la API nuevamente pasan por alguna infraestructura en la nube hacia las API. Y luego, cuando los datos regresan, haces algo con estos datos, como devolver el JSON o tal vez renderizar el HTML en el lado del servidor y luego devolverlo al navegador. Este es el tipo de aplicación que vamos a intentar probar. Si escribes la prueba unitaria, en realidad, con cada prueba unitaria, cubres este pequeño rectángulo azul. Espero que puedas verlo. Entonces, necesitas escribir muchas pruebas unitarias para cubrir todo el espacio en blanco. Pero aún así, no podrás cubrir la interacción entre los recuadros. Entonces, podemos pensar cómo podemos escribir pruebas de integración que nos ayuden aquí. Este es el escenario típico de la prueba de integración. Dado que tenemos una solicitud entrante, una solicitud HTTP, por ejemplo, desde el navegador, la aplicación realiza llamadas API especificadas y devuelve la respuesta esperada.

4. Enfoques de Pruebas de Integración

Short description:

Captura el comportamiento para garantizar la funcionalidad esperada de la aplicación. Escribe pruebas de integración enfocadas para el código que posees, simulando las solicitudes internas y las interacciones con la API. Considera las pruebas de integración de caja negra para obtener una mayor confianza, pero excluye los middlewares de infraestructura complejos si es necesario.

Entonces, si capturamos este comportamiento, podemos estar bastante seguros de que la aplicación hace lo que esperamos. Veamos cómo podemos escribir pruebas de integración dadas esta situación. Primero, las llamo pruebas de integración enfocadas porque solo están probando el código que posees. Todos los middlewares de infraestructura que no posees, generalmente provienen de alguna biblioteca externa, tal vez haya un equipo de plataforma que los posea. Realmente no quieres saber qué hay dentro. Por lo tanto, los excluyes de la creación. También, las llamadas a la API. Probablemente estén utilizando algunos clientes de API. Nuevamente, los clientes de API se comparten entre muchas aplicaciones de tu organización. Por lo tanto, no quieres volver a probarlos. Te enfocas realmente en probar tu código. En este caso, simulas la solicitud interna, digamos que si es un Express JS, tienes un objeto de solicitud. Entonces, simulas cómo se ve el objeto de solicitud antes de que llegue a tu controlador o manejador de ruta donde está la lógica.

5. Pruebas de Integración de Caja Negra

Short description:

Simula las interacciones del código y verifica la respuesta esperada para pruebas de integración enfocadas. Las pruebas de integración de caja negra cubren toda la aplicación Node.js como una sola pieza, simulando las solicitudes HTTP entrantes y salientes. Considera la complejidad y el conocimiento de los middlewares de infraestructura al decidir incluirlos o excluirlos de las pruebas.

Simulas cómo tu code interactúa con los clientes de API, y luego haces una afirmación de que la respuesta del controlador de ruta se ve como se espera. Es un buen enfoque, pero puedes perder algunas cosas importantes. Entonces, si tienes una cadena compleja de middlewares, si tus middlewares están haciendo algo que es muy importante para ti, es posible que desees incluir esos middlewares y clientes de API en la cobertura de pruebas.

Esto es lo que llamo pruebas de integración de caja negra, porque este tipo de prueba prueba toda la aplicación Node.js como una sola pieza. No te importan los detalles de implementación internos. La diferencia principal aquí es que simulas la solicitud HTTP entrante. Simulas todas las solicitudes HTTP salientes que tu aplicación Node.js puede hacer a la API externa. Luego, escribes una afirmación sobre la respuesta esperada. En este caso, tienes mucha más confianza de que todo funciona como se espera, incluso incluyendo la cadena de middlewares.

Pero a veces puede ser muy difícil de crear, porque en mi experiencia, esos middlewares de infraestructura pueden realizar, por ejemplo, muchas llamadas a la API por sí mismos. O realmente no sabes qué está sucediendo dentro de esos middlewares de infraestructura. Entonces, no simularlos puede hacer que tu prueba sea tan compleja que pasarás más tiempo configurando toda la infraestructura requerida para que se ejecute en lugar de simplemente enfocarte. Entonces, depende de tu situación. Si tus middlewares de infraestructura no son tan complejos, inclúyelos. De lo contrario, puedes excluirlos.

6. Pruebas de Aplicación Node.js en el Navegador

Short description:

Incluye las pruebas de la aplicación Node.js en la misma suite que las pruebas del navegador. Ejecuta la aplicación Node.js como un proceso separado en el navegador. Este enfoque es más complejo pero mejor que las pruebas de extremo a extremo, que incluyen todo y pueden llevar a fallos debido a factores externos.

Y podrías pensar, como, okay, ya estoy usando pruebas de navegador. Tengo una aplicación del lado del cliente. Ya estoy usando, como, no sé, Cypress o playwright para ejecutar mis pruebas de interfaz de usuario en el navegador. ¿Puedo también incluir las pruebas de mi aplicación Node.js en la misma suite de pruebas? Bueno, técnicamente puedes. Entonces, básicamente, puedes iniciar la solicitud a tu aplicación Node.js desde el navegador y escribir afirmaciones en el navegador, como dentro de Cypress o playwright. La mayor desventaja de este enfoque es que necesitas ejecutar tu aplicación Node.js como un proceso separado. Por lo tanto, la infraestructura para este tipo de prueba es más compleja en comparación con las anteriores. Pero aún así, es mucho mejor que las pruebas de extremo a extremo. Porque en las pruebas de extremo a extremo, incluyes todo. Y si algo falla, como si algo está mal con la infraestructura en la nube en tu entorno de pruebas o si otro equipo implementó un servicio de API con errores, tu prueba fallará.

7. Conclusiones clave y herramientas recomendadas

Short description:

Aprende o adopta la estrategia del trofeo de pruebas. Comienza con pruebas de integración y luego cubre las partes faltantes con pruebas unitarias. Reduce la cantidad de pruebas de extremo a extremo. Mide el impacto de cambiar las prácticas de prueba. Las herramientas que personalmente uso son: Jest, VTest, Knock, SuperAgent, mock HTTP conocido, Cypress, Playwright.

Entonces, algunas conclusiones clave. Primero que nada, aprende o adopta la estrategia del trofeo de pruebas. Es un buen enfoque. Te guiará y te ayudará a enfocarte en escribir la prueba correcta en el momento adecuado. Una sugerencia propia, comienza con pruebas de integración. Escribe tantas pruebas de integración como sea posible y luego cubre las partes faltantes con pruebas unitarias. Nuevamente, estamos hablando de aplicaciones. Por supuesto, si estás desarrollando una biblioteca, probablemente las pruebas de integración sean la elección correcta allí. Lo siento. Las pruebas unitarias son la mejor elección allí.

Y luego, en la medida de lo posible, intenta reducir la cantidad de pruebas de extremo a extremo. Puede parecer, especialmente al principio cuando recién creas una aplicación, que es la forma más fácil de probar toda la aplicación. Pero cuanto más las mantengas o cuanto más madura sea tu aplicación, más tiempo necesitarás mantenerla y más problemas causarán. Y por último pero no menos importante, no confíes en tus sentimientos. Intenta medir. Hay muchas herramientas que puedes integrar en tu canal de implementación y que medirán cómo van tus métricas y si cambiar la forma en que escribes pruebas tiene un impacto positivo o no.

Y algunas herramientas que personalmente uso cuando escribo pruebas. Frameworks de prueba como Jest, una elección muy obvia. Pero recientemente también estoy usando VTest, que es más rápido. Para simular llamadas a API de terceros, uso Knock. Si necesito simular la llamada HTTP entrante a mi aplicación Node.js, uso SuperAgent. El mock HTTP conocido es un módulo muy útil. Si quieres escribir pruebas de integración enfocadas o pruebas que se ejecuten dentro del framework Express, puedes usar este módulo para simular la solicitud y respuesta de Express. Y también puedes usar Cypress o Playwright para pruebas en el navegador. Así que muchas gracias. Espero que esto genere algunas ideas y te brinde algunas direcciones sobre cómo puedes mejorar tu código. Definitivamente puedes hacer más con menos. Gracias.

8. Mocking Third-Party Services and Snapshot Testing

Short description:

Simula servicios de terceros en pruebas de extremo a extremo. No confíes en su implementación real. La prueba empaquetada es una prueba de contrato para verificar las simulaciones. Si tienes una prueba empaquetada en tu canal de implementación, úsala. Las pruebas de snapshot brindan confianza en las afirmaciones de respuesta, pero pueden tener falsos positivos.

¿Qué opinas sobre simular servicios de terceros en pruebas de extremo a extremo? Creo que todo lo que no posees y todo en lo que no confías debería ser simulado. Por lo tanto, no debes confiar en la implementación real de un servicio de terceros porque generalmente son poco confiables. Pueden fallar en el momento en que deseas implementar tu aplicación. Así que no quieres depender de ellos.

De acuerdo. Interesante. Habría pensado que querrías saber si podemos depender de ellos. ¡Así que es un poco contradictorio para mí! Y esto es interesante. Aparentemente, porque no entiendo del todo qué es una prueba empaquetada. De acuerdo, sí. Sí, así que tengo... Tal vez puedas explicarme qué es una prueba empaquetada, ya que no lo sé. Entonces, una prueba empaquetada es una prueba de contrato. Básicamente, cada vez que simulas algo, eventualmente necesitas verificar si tus simulaciones están actualizadas con la implementación real de la API. Entonces, la prueba empaquetada te permite tener un contrato entre tu aplicación Node.js y las API aguas abajo, y puedes verificar si este contrato sigue siendo válido. Y si el contrato sigue siendo válido, significa que tus simulaciones siguen siendo válidas. Entonces, la respuesta corta es que si tienes una prueba empaquetada en tu canal de implementación, úsala, pero es bastante difícil de configurar. Pero es un buen enfoque. De acuerdo. Así que es un... Es un paso avanzado, sí. No es fácil de seguir... Sí, no es tan fácil. ¿Qué opinas sobre las pruebas de snapshot? Pruebas de snapshot. No lo mencioné, pero cada vez que haces una afirmación sobre la respuesta, personalmente me gusta escribir una prueba de snapshot. Te brinda una gran confianza de que sabes exactamente qué está devolviendo tu aplicación. Entonces, incluso si algo cambia y no esperas que afecte tu respuesta, el snapshot te lo indicará de inmediato, diciéndote que hay una diferencia.

9. Snapshot Testing and Maintaining Mocks

Short description:

Las pruebas de snapshot pueden dar falsos positivos pero siguen siendo útiles. Mantener las simulaciones depende de la estabilidad de la API. Si todos los equipos siguen la regla de no hacer cambios que rompan, las simulaciones siguen siendo confiables. Las API no deben contener cambios incompatibles hacia atrás. ¿Cypress o Playwright? Respuesta de una palabra.

Pero podría darte muchos falsos positivos. Sí, puede haber algún cambio insignificante que no sea relevante, pero la prueba de snapshot podría fallar. Personalmente lo uso, pero sé que, por ejemplo, a los miembros de mi equipo no les gusta porque a menudo, necesitas actualizar las simulaciones. Y a veces las actualizas solo porque están rotas y realmente están rotas. Sí. Pero... Sí, eso es interesante. Las pruebas de snapshot siempre son una bendición y una maldición.

Siguiente pregunta para ti. ¿Cómo mantienes tus simulaciones si las API externas cambian con el tiempo? Sí. Entonces, las API externas en esta charla suelen ser las API internas de tu empresa. Por lo general, en la empresa, hay un acuerdo de que no se deben hacer cambios incompatibles hacia atrás. Entonces, idealmente, tus simulaciones deberían seguir siendo válidas para siempre. Si no confías en los otros equipos de tu empresa, entonces puedes implementar la verificación. Pero en mi experiencia, durante muchos años, si todos los equipos siguen esta regla de que las API no pueden tener cambios que rompan, por lo general, tus simulaciones se mantienen actualizadas y siguen siendo confiables. Entonces, solo cambias las simulaciones si comienzas a utilizar una nueva función. Luego actualizas la simulación para que comience a proporcionar esta nueva función. Pero si no dependes de esa nueva función, no necesitas actualizar la simulación. Entonces, pueden permanecer... Oh, entiendo. ¿Entonces es más estable de lo que la gente piensa? Sí. En mi experiencia, sí. Mucha gente le tiene miedo. Pero en mi experiencia, es bastante estable. Pero nuevamente, si todos siguen la regla de que las API no deben contener cambios incompatibles hacia atrás.

Vamos a comenzar una guerra con esta pregunta, tal vez. Cypress o Playwright? De acuerdo. Solo se permite una respuesta de una palabra. Sin explicaciones.

10. Playwright, Pruebas Manuales, Monitoreo y TDD

Short description:

Playwright es mi preferencia personal por su facilidad de configuración y CodeGen. Las pruebas manuales deben ser externalizadas a los usuarios. Implementa rápidamente y soluciona los problemas encontrados por los usuarios. Las herramientas de monitoreo como Datadog brindan una comprensión clara del comportamiento de la aplicación. Se intentó TDD en hackathons pero no en la vida real.

Simplemente diremos. De acuerdo. Bueno, mi preferencia personal reciente es Playwright porque siento que es mucho más fácil de configurar. Pero eso es una preferencia personal. Soy un gran fan de CodeGen. En el pasado, tuve buenos momentos escribiendo pruebas con Cypress, así que no tengo nada en contra de Cypress. CodeGen también es muy bueno en Playwright. Puedes simplemente hacer clic y obtener las pruebas. Ahorra mucho tiempo al escribir pruebas. Y puedes hacer que la máquina lo haga por ti.

¿Qué hay de las pruebas manuales? ¿Y tener pruebas manuales como parte del sistema? Bueno, creo que en el mundo moderno donde cada empresa intenta lanzar nuevas funciones tan a menudo como sea posible, no veo que debas tener pruebas manuales en tu flujo de trabajo. Si tienes algo que no tiene sentido automatizar, puedo imaginar que sería mejor crear un interruptor de función para ello, de modo que no se exponga directamente al usuario final, implementar en producción, habilitarlo para algunos mejores probadores limitados y hacer pruebas manuales en producción. Pero no permitas que las pruebas manuales bloqueen tu implementación. Externaliza tus pruebas manuales a los usuarios. Sí, tus usuarios pueden ser tus mejores probadores, ¿verdad? Supongo que si puedes implementar rápidamente de nuevo, puedes solucionar lo que sea que se encuentre. Sí. Si tienes monitoreo, entenderás de inmediato que este usuario tiene algunos problemas, puedes crear una solución y implementarla más rápido.

¿Qué monitoreo? Esta es mi propia pregunta. Observabilidad. ¿Qué herramientas de monitoreo usarías en tu flujo de trabajo? En este momento, en eBay usamos una nube privada, por lo que tenemos algunas herramientas propietarias. Pero antes de eso, por ejemplo, usaba Datadog. Es una herramienta muy robusta. Te dice todo sobre lo que está sucediendo con tu aplicación Node.js, por lo que tienes una comprensión clara de lo que está sucediendo. Tienes todas las métricas. Sí. Excelente.

Luego, esto es interesante. Hacer pruebas de integración primero se interpondría en el camino de hacer TDD. ¿Cuál es tu opinión sobre TDD? Bueno, seré honesto aquí. Intenté TDD durante los hackathons y talleres, pero nunca lo hice en la vida real.

11. TDD, Cobertura de Código y Venta de Pruebas

Short description:

Quiero decir, cuando hago mi trabajo diario. ¿Cuánta cobertura de código es suficiente? Necesitas entender el producto y cómo los usuarios lo utilizan para determinar qué flujos deben ser cubiertos por las pruebas. El objetivo no debería ser un porcentaje concreto de cobertura, sino asegurarse de que las pruebas eviten las regresiones. Al invertir tiempo en las pruebas ahora, puedes ahorrar tiempo en el futuro al evitar problemas de regresión.

Quiero decir, cuando hago mi trabajo diario. Bueno.

Tengo curiosidad. Nuevamente, la gente no puede ver esto, pero ¿cuántas personas están haciendo TDD? Wow, hay un grupo de personas. Bueno, veo a alguien levantando la mano, pero estoy seguro de que no está haciendo TDD. Lo estaban llamando. Necesitamos ver el código de las personas para comprobarlo. Escucho a mucha gente decir que lo están haciendo. Hasta que llega una fecha límite. Eso es muy gracioso.

¿Cuánta cobertura de código es suficiente? No quiero decir un número concreto. O cómo definir qué probar y qué no es la segunda parte de eso, así que tal vez eso sea mejor. Sí, necesitas entender el producto, ¿verdad? No creo que la cobertura de las pruebas pueda responderse solo desde un punto de vista técnico del producto. Entonces, si entiendes el producto, si entiendes cómo los usuarios utilizan el producto y cómo las empresas ganan dinero o algo así con este producto, podrás entender mejor qué flujos son más importantes y qué flujos deben ser cubiertos por las pruebas. Creo que eso tiene más sentido que simplemente cubrir el 80% o el 100% de las líneas. Eso no tiene sentido. Todos ustedes lo saben. Sí, puedes escribir algunas pruebas estúpidas que te darán una cobertura del 100%, pero no demostrarán nada. Ah-ha, de acuerdo.

Veo que hay bastantes preguntas sobre el porcentaje. Creo que eso se debe a que a menudo nos dicen los líderes de equipo que debemos tener cobertura. Diría que el porcentaje no debería ser el objetivo, pero nuevamente, por mi experiencia, cuando comienzas a escribir pruebas de integración, naturalmente obtienes alrededor del 70% al 80% de cobertura, naturalmente no necesitas hacer un esfuerzo adicional. Y luego, si realmente necesitas agregar más cobertura, si hay algunos casos extremos que aún deseas cubrir, simplemente escribe pruebas unitarias. Si te hace sentir más seguro al lanzar, simplemente escribe esas pruebas. Creo que respondiste un poco esto al comienzo de tu charla, pero podría valer la pena recapitular aquí también. ¿Cómo vendes las pruebas a los PM o a las empresas que están luchando? Bueno, para ellos, vendo las regresiones. A ningún producto le gustan las regresiones. Cuando lanzan algo, una nueva función, y algo más se rompe, ¿verdad? No les gusta, así que generalmente las pruebas son tu arma contra las regresiones. Esa es una de las formas en que puedes venderlo.

12. Ejecución Automatizada de Pruebas y Conclusión

Short description:

Al invertir tiempo en las pruebas ahora, puedes ahorrar tiempo en el futuro al evitar problemas de regresión. Determina el mejor momento para ejecutar automáticamente las pruebas según las necesidades de tu equipo. Es importante ejecutar pruebas en cada solicitud de extracción y en tu canal de implementación. Asegúrate de que las pruebas se ejecuten automáticamente para evitar olvidos y mantener un entorno de desarrollo seguro.

Significa que inviertes un poco más de tiempo ahora, pero las otras características que se desarrollarán en tres meses, en medio año, gastarás menos tiempo porque no necesitarás luchar contra las regresiones. Rompe intencionalmente las cosas. Así que ellos dicen, mira, sé que parece que las cosas se están rompiendo mucho últimamente, pero tengo una solución. Simplemente vamos a probar más y mágicamente funciona. Así que supongo que sí, no pueden ver el code con suerte. Mientras no sea uno de esos TPM, estamos bien. Una bonita mentira.

Veamos. Esto también es interesante. ¿Cuándo, en tu opinión, es el mejor momento para ejecutar automáticamente las pruebas? Porque veo que algunas personas lo hacen en el commit, o en los hooks pre-commit, y en el push, justo antes de ir a producción. Entonces, ¿cuándo deberían ejecutar las pruebas las personas? ¿O incluso qué pruebas se ejecutan cuándo? Bueno, si tus pruebas son rápidas, puedes ejecutarlas sobre la marcha. Tan pronto como cambies el code, puedes ejecutar la prueba de inmediato. Lo que solemos hacer en nuestro equipo es ejecutar pruebas en cada solicitud de extracción. Siempre ejecutas la prueba antes de hacer push al code. Es obvio. Y luego ejecutas la prueba cuando tienes una solicitud de extracción, porque si las pruebas de la solicitud de extracción fallan, no tiene sentido que otros pasen tiempo revisando esa solicitud de extracción. Y luego, por supuesto, ejecutas la prueba en tu canal de implementación. Estos son los momentos adecuados. La pregunta es cuándo necesitas ejecutar automáticamente las pruebas. Tan pronto como tengas las pruebas, asegúrate de que se ejecuten automáticamente, para que no las olvides. Incluso si haces un commit, como el viernes por la tarde y te vas a casa, estás 100 por ciento seguro de que la prueba se ejecutará. De acuerdo, asegúrate de que sea automático. Sí. Eso es todo. Sí. Así nadie tiene que presionar un botón y luego estamos seguros. Sí. Fantástico.

Muy bien. Creo que eso es probablemente todo el tiempo que tenemos para preguntas hoy. Así que demos otra ronda de aplausos a Eugene. Gracias. Y puedes volver y disfrutar de tu día. Muchas gracias, Eugene. Gracias. Que tengas un buen día. Adiós.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Escalando con Remix y Micro Frontends
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Escalando con Remix y Micro Frontends
Top Content
This talk discusses the usage of Microfrontends in Remix and introduces the Tiny Frontend library. Kazoo, a used car buying platform, follows a domain-driven design approach and encountered issues with granular slicing. Tiny Frontend aims to solve the slicing problem and promotes type safety and compatibility of shared dependencies. The speaker demonstrates how Tiny Frontend works with server-side rendering and how Remix can consume and update components without redeploying the app. The talk also explores the usage of micro frontends and the future support for Webpack Module Federation in Remix.
Solicitudes de Red con Cypress
TestJS Summit 2021TestJS Summit 2021
33 min
Solicitudes de Red con Cypress
Top Content
Cecilia Martinez, a technical account manager at Cypress, discusses network requests in Cypress and demonstrates commands like cydot request and SCI.INTERCEPT. She also explains dynamic matching and aliasing, network stubbing, and the pros and cons of using real server responses versus stubbing. The talk covers logging request responses, testing front-end and backend API, handling list length and DOM traversal, lazy loading, and provides resources for beginners to learn Cypress.
Componentes de Full Stack
Remix Conf Europe 2022Remix Conf Europe 2022
37 min
Componentes de Full Stack
Top Content
RemixConf EU discussed full stack components and their benefits, such as marrying the backend and UI in the same file. The talk demonstrated the implementation of a combo box with search functionality using Remix and the Downshift library. It also highlighted the ease of creating resource routes in Remix and the importance of code organization and maintainability in full stack components. The speaker expressed gratitude towards the audience and discussed the future of Remix, including its acquisition by Shopify and the potential for collaboration with Hydrogen.
Depuración de JS
React Summit 2023React Summit 2023
24 min
Depuración de JS
Top Content
Debugging JavaScript is a crucial skill that is often overlooked in the industry. It is important to understand the problem, reproduce the issue, and identify the root cause. Having a variety of debugging tools and techniques, such as console methods and graphical debuggers, is beneficial. Replay is a time-traveling debugger for JavaScript that allows users to record and inspect bugs. It works with Redux, plain React, and even minified code with the help of source maps.
Un Marco para Gestionar la Deuda Técnica
TechLead Conference 2023TechLead Conference 2023
35 min
Un Marco para Gestionar la Deuda Técnica
Top ContentPremium
Today's Talk discusses the importance of managing technical debt through refactoring practices, prioritization, and planning. Successful refactoring requires establishing guidelines, maintaining an inventory, and implementing a process. Celebrating success and ensuring resilience are key to building a strong refactoring culture. Visibility, support, and transparent communication are crucial for addressing technical debt effectively. The team's responsibilities, operating style, and availability should be transparent to product managers.

Workshops on related topic

Domina los Patrones de JavaScript
JSNation 2024JSNation 2024
145 min
Domina los Patrones de JavaScript
Top Content
Featured Workshop
Adrian Hajdin
Adrian Hajdin
Durante esta masterclass, los participantes revisarán los patrones esenciales de JavaScript que todo desarrollador debería conocer. A través de ejercicios prácticos, ejemplos del mundo real y discusiones interactivas, los asistentes profundizarán su comprensión de las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables. Al final de la masterclass, los participantes ganarán una nueva confianza en su capacidad para escribir código JavaScript de alta calidad que resista el paso del tiempo.
Puntos Cubiertos:
1. Introducción a los Patrones de JavaScript2. Patrones Fundamentales3. Patrones de Creación de Objetos4. Patrones de Comportamiento5. Patrones Arquitectónicos6. Ejercicios Prácticos y Estudios de Caso
Cómo Ayudará a los Desarrolladores:
- Obtener una comprensión profunda de los patrones de JavaScript y sus aplicaciones en escenarios del mundo real- Aprender las mejores prácticas para organizar el código, resolver desafíos comunes y diseñar arquitecturas escalables- Mejorar las habilidades de resolución de problemas y la legibilidad del código- Mejorar la colaboración y la comunicación dentro de los equipos de desarrollo- Acelerar el crecimiento de la carrera y las oportunidades de avance en la industria del software
Diseñando Pruebas Efectivas con la Biblioteca de Pruebas de React
React Summit 2023React Summit 2023
151 min
Diseñando Pruebas Efectivas con la Biblioteca de Pruebas de React
Top Content
Featured Workshop
Josh Justice
Josh Justice
La Biblioteca de Pruebas de React es un gran marco para las pruebas de componentes de React porque responde muchas preguntas por ti, por lo que no necesitas preocuparte por esas preguntas. Pero eso no significa que las pruebas sean fáciles. Todavía hay muchas preguntas que tienes que resolver por ti mismo: ¿Cuántas pruebas de componentes debes escribir vs pruebas de extremo a extremo o pruebas de unidad de nivel inferior? ¿Cómo puedes probar una cierta línea de código que es difícil de probar? ¿Y qué se supone que debes hacer con esa persistente advertencia de act()?
En esta masterclass de tres horas, presentaremos la Biblioteca de Pruebas de React junto con un modelo mental de cómo pensar en el diseño de tus pruebas de componentes. Este modelo mental te ayudará a ver cómo probar cada bit de lógica, si debes o no simular dependencias, y ayudará a mejorar el diseño de tus componentes. Te irás con las herramientas, técnicas y principios que necesitas para implementar pruebas de componentes de bajo costo y alto valor.
Tabla de contenidos- Los diferentes tipos de pruebas de aplicaciones de React, y dónde encajan las pruebas de componentes- Un modelo mental para pensar en las entradas y salidas de los componentes que pruebas- Opciones para seleccionar elementos DOM para verificar e interactuar con ellos- El valor de los mocks y por qué no deben evitarse- Los desafíos con la asincronía en las pruebas de RTL y cómo manejarlos
Requisitos previos- Familiaridad con la construcción de aplicaciones con React- Experiencia básica escribiendo pruebas automatizadas con Jest u otro marco de pruebas unitarias- No necesitas ninguna experiencia con la Biblioteca de Pruebas de React- Configuración de la máquina: Node LTS, Yarn
Uso de CodeMirror para construir un editor de JavaScript con Linting y AutoCompletado
React Day Berlin 2022React Day Berlin 2022
86 min
Uso de CodeMirror para construir un editor de JavaScript con Linting y AutoCompletado
Top Content
Workshop
Hussien Khayoon
Kahvi Patel
2 authors
Usar una biblioteca puede parecer fácil a primera vista, pero ¿cómo eliges la biblioteca correcta? ¿Cómo actualizas una existente? ¿Y cómo te abres camino a través de la documentación para encontrar lo que quieres?
En esta masterclass, discutiremos todos estos puntos finos mientras pasamos por un ejemplo general de construcción de un editor de código usando CodeMirror en React. Todo mientras compartimos algunas de las sutilezas que nuestro equipo aprendió sobre el uso de esta biblioteca y algunos problemas que encontramos.
Detox 101: Cómo escribir pruebas de extremo a extremo estables para su aplicación React Native
React Summit 2022React Summit 2022
117 min
Detox 101: Cómo escribir pruebas de extremo a extremo estables para su aplicación React Native
Top Content
Workshop
Yevheniia Hlovatska
Yevheniia Hlovatska
A diferencia de las pruebas unitarias, las pruebas de extremo a extremo buscan interactuar con su aplicación tal como lo haría un usuario real. Y como todos sabemos, puede ser bastante desafiante. Especialmente cuando hablamos de aplicaciones móviles.
Las pruebas dependen de muchas condiciones y se consideran lentas e inestables. Por otro lado, las pruebas de extremo a extremo pueden dar la mayor confianza de que su aplicación está funcionando. Y si se hace correctamente, puede convertirse en una herramienta increíble para aumentar la velocidad del desarrollador.
Detox es un marco de pruebas de extremo a extremo en caja gris para aplicaciones móviles. Desarrollado por Wix para resolver el problema de la lentitud e inestabilidad y utilizado por React Native en sí como su herramienta de pruebas E2E.
Únete a mí en esta masterclass para aprender cómo hacer que tus pruebas de extremo a extremo móviles con Detox sean excelentes.
Prerrequisitos- iOS/Android: MacOS Catalina o más reciente- Solo Android: Linux- Instalar antes de la masterclass
Masterclass de Pruebas de API con Postman
TestJS Summit 2023TestJS Summit 2023
48 min
Masterclass de Pruebas de API con Postman
Top Content
WorkshopFree
Pooja Mistry
Pooja Mistry
En el panorama siempre en evolución del desarrollo de software, garantizar la fiabilidad y funcionalidad de las API se ha vuelto primordial. "Pruebas de API con Postman" es una masterclass completa diseñada para equipar a los participantes con los conocimientos y habilidades necesarios para sobresalir en las pruebas de API utilizando Postman, una herramienta poderosa ampliamente adoptada por profesionales en el campo. Esta masterclass profundiza en los fundamentos de las pruebas de API, avanza a técnicas de prueba avanzadas y explora la automatización, las pruebas de rendimiento y el soporte multiprotocolo, proporcionando a los asistentes una comprensión holística de las pruebas de API con Postman.
Únete a nosotros para esta masterclass para desbloquear todo el potencial de Postman para las pruebas de API, agilizar tus procesos de prueba y mejorar la calidad y fiabilidad de tu software. Ya seas un principiante o un probador experimentado, esta masterclass te equipará con las habilidades necesarias para sobresalir en las pruebas de API con Postman.
Monitoreo 101 para Desarrolladores de React
React Summit US 2023React Summit US 2023
107 min
Monitoreo 101 para Desarrolladores de React
Top Content
WorkshopFree
Lazar Nikolov
Sarah Guthals
2 authors
Si encontrar errores en tu proyecto frontend es como buscar una aguja en un pajar de código, entonces el monitoreo de errores de Sentry puede ser tu detector de metales. Aprende los conceptos básicos del monitoreo de errores con Sentry. Ya sea que estés ejecutando un proyecto de React, Angular, Vue, o simplemente JavaScript “vainilla”, mira cómo Sentry puede ayudarte a encontrar el quién, qué, cuándo y dónde detrás de los errores en tu proyecto frontend.
Nivel de la masterclass: Intermedio