5 Hábitos para Tratar tu Código de Pruebas como Código de Producción

Rate this content
Bookmark

En esta charla, David hablará sobre 5 hábitos que puedes seguir para asegurar la misma calidad que tu código de producción y construir suites de pruebas que sean robustas, consistentes y te ayuden a depurar los problemas rápidamente.

- Viaje típico para equipos que adoptan la automatización de pruebas

- 5 hábitos a seguir al construir tu suite de pruebas

- Nuestros aprendizajes de una actividad reciente de refactorización

22 min
03 Nov, 2022

Video Summary and Transcription

La charla de hoy se centra en los cinco hábitos para tratar el código de pruebas como código de producción. Se enfatiza la importancia de las pruebas modulares y descomponer las pruebas de interfaz de usuario en componentes más pequeños. Tratar a los SDETs como ingenieros de software es crucial para la calidad del código y las pruebas. También se discuten los desafíos de las pruebas de instantáneas y los beneficios de las pruebas de componentes, incluida la mejora de la eficiencia y la solución de problemas de asincronía y promesas anidadas.

Available in English

1. Introducción

Short description:

Hoy voy a hablar sobre los cinco hábitos para tratar tu código de prueba como lo harías con el código de producción. Mi nombre es David Burns, soy el responsable de la Oficina de Programas de Código Abierto en Browserstack y soy el presidente del grupo de trabajo de pruebas de navegadores y herramientas del W3C. Al final del día, podrás llevar algo contigo y ver cómo puedes reorganizar todo lo que haces en el trabajo para facilitar tu vida.

Hola a todos. Hoy voy a hablar sobre los cinco hábitos para tratar tu código de prueba como lo harías con el código de producción. Así que, en primer lugar, ¿quién soy yo? Mi nombre es David Burns o como la mayoría de la gente me conoce, tester automatizado. Soy el responsable de la Oficina de Programas de Código Abierto en Browserstack. Soy el presidente del grupo de trabajo de pruebas de navegadores y herramientas del W3C. Soy un colaborador de Selenium y Nightwatch JS. Llevo tiempo en esta industria. Y espero que al final del día, puedas llevar algo contigo y ver cómo puedes reorganizar todo lo que haces en el trabajo para facilitar tu vida.

2. Enfoque de las pruebas y la Pirámide de pruebas

Short description:

En esta parte, discutiremos cómo las personas tienden a abordar las pruebas en los proyectos y cómo descomponer las pruebas para que sean manejables, mantenibles y menos propensas a errores. También exploraremos la importancia de tratar el código de prueba como código de producción y mejorar las herramientas. Además, examinaremos la pirámide de pruebas, que incluye pruebas unitarias, pruebas de servicio y pruebas de interfaz de usuario, y el equilibrio entre el aislamiento y la integración. Por último, abordaremos el problema de sobrecargar las pruebas unitarias y los desafíos resultantes para mantenerlas.

Aquí está nuestra agenda. Voy a analizar cómo las personas tienden a ver sus pruebas en los proyectos, cómo podemos descomponer las pruebas para que sean manejables, mantenibles y menos propensas a errores. Esa es la parte más importante. Cómo tratar tu código de prueba como código de producción. Entonces, qué hacemos con la última parte y cómo mejorar tus herramientas y en realidad por qué esto es importante. Te sorprenderás. Así que empecemos y veamos a dónde llegamos.

Ahora, he estado trabajando en pruebas durante muchos, muchos años y tiendo a ver cómo las personas ven las pruebas desde diferentes perspectivas. Y si lo vemos de la manera teórica, así es como deberían hacerlo las personas. En la parte inferior, tenemos aquí la pirámide de pruebas. En la parte inferior, tenemos las pruebas unitarias. La razón por la que eso es importante es porque la razón por la que es más amplia es que siempre debería haber muchas más de ellas que cualquier otro tipo de pruebas en nuestro código de prueba. Luego tenemos las pruebas de servicio. Estas son nuestras pruebas de integración. Estas son todas como si las pruebas unitarias fueran pequeñas, las pruebas de servicio tienden a ser medianas y comienzan a cerrar las brechas entre todos nuestros pequeños componentes de código o áreas atómicas de código. Y nos acerca a la siguiente parte, que son nuestras pruebas de interfaz de usuario. Ahora, una de las cosas que no incluí aquí es la prueba manual. Por lo general, tiendo a hablar sobre las pruebas automatizadas, pero esto no significa que menosprecie las pruebas manuales. Y si observas las flechas en el lateral, verás que en el lado izquierdo, a medida que miro la pantalla, hay más aislamiento y más integración. A medida que subes, necesitarás más integración y menos aislamiento. Sin embargo, el inconveniente de agregar más integración es que las cosas se volverán más lentas. Esto es simplemente ciencia de la computación, ¿verdad? Cuanto más código tenga que procesarse, más lento será, ¿verdad? Si haces un bucle dentro de otro bucle, sabes que será más lento que un solo bucle tratando de encontrar algo. Idealmente, debemos intentar hacer pruebas súper rápidas y muchas menos pruebas lentas. Desafortunadamente, especialmente por lo que veo, y aprecio que pueda haber mucho sesgo, después de haber trabajado en Selenium y NightwatchJS durante muchos, muchos años, es que las personas hacen pruebas unitarias. Estas generalmente son realizadas por tus desarrolladores, y se hacen con jest, Karma o cosas así, y las personas ponen mucho esfuerzo en ellas. Luego comenzarás a tener algunas pruebas de servicio o estas pruebas de integración, y así tomé mi imagen aquí del trabajo de Martin Fowler, y la he reorganizado un poco. Luego, especialmente ahora que veo esto en BrowserStack y hablo con los clientes, y cuando estaba en Mozilla, hablando con usuarios de Selenium, las personas tienden a arrojar todo, y quiero decir todo, a sus pruebas unitarias. Las llenarían, pondrían toneladas de pruebas, y luego, poco a poco, las pruebas se volverían inmantenibles.

3. Desafíos con las Pruebas de Interfaz de Usuario y Pruebas Modulares

Short description:

Un desarrollador realizaría un cambio en la interfaz de usuario. Y de repente, una gran cantidad de pruebas comenzarían a fallar. Se dedica mucho esfuerzo a las pruebas de interfaz de usuario, pero no es sostenible. Necesitamos hacer nuestras pruebas más modulares, eligiendo la prueba adecuada para cada situación.

Un desarrollador realizaría un cambio en la interfaz de usuario. Un diseñador ayudaría, y de repente, una gran cantidad de pruebas comenzarían a fallar. Y luego, obviamente, ¿a quién se culpa? A la herramienta de testing. No a las personas que han diseñado el código o las pruebas. Ninguna de esas personas. Es puramente culpa del marco de pruebas. Tú y yo sabemos que eso no es correcto, pero generalmente así es como reacciona la gente, ¿de acuerdo?

Y se dedica mucho esfuerzo a las pruebas de interfaz de usuario. Y de repente, dicen: No tengo tiempo para escribir pruebas de interfaz de usuario. Tengo que hacer estas pruebas manuales para poder entender lo que tengo que hacer. Y las construyen, y las construyen, y las construyen. Y luego intentan escalar horizontalmente porque sus pruebas de interfaz de usuario tardan un día en ejecutarse. Todos sabemos que idealmente la integración continua debería estar lista en 10 minutos, ¿verdad? Ese es el estándar de oro. Siempre intenta que todas tus pruebas se realicen en 10 minutos para tener un ciclo de retroalimentación rápido porque no sé tú, pero cuando escribo código, no siempre funciona. Lo admito. Escribo mucho código. Escribo muchos errores. Afortunadamente, suelo escribir muchas pruebas para acompañarlo. Y a veces funcionan en mi máquina y luego dejan de funcionar en la integración continua porque hay ciertas suposiciones. Pero necesitamos ese estándar de oro de pruebas realmente rápidas. Y si estamos acumulando todo en el área de la interfaz de usuario, entonces será realmente, realmente lento.

Entonces, ¿cómo podemos solucionar eso? Bueno, hagamos nuestras pruebas mucho más modulares. Conocemos las pruebas pequeñas, ¿verdad, o pruebas unitarias? Conocemos las pruebas de integración o pruebas medianas. Y tenemos estas pruebas de extremo a extremo o pruebas grandes. El problema es que no siempre se necesitan pruebas de extremo a extremo. Sabemos que si hay un formulario, puedes probar ese formulario de forma aislada. No necesita ser todo un flujo de trabajo completo. Puedes construir estas cosas, especialmente si estás trabajando con tu equipo de front-end o construyendo componentes modularizados para avanzar. Y así, necesitamos elegir la prueba adecuada, al igual que elegir la arquitectura adecuada. Sé, por haber trabajado con muchas personas en la escritura de pruebas, que si estás escribiendo código, no vas a tener un archivo monolítico y luego enviarlo a producción.

4. Tratando a los SDETs como Ingenieros de Software

Short description:

Trata a tus SDETs como tratarías a tus ingenieros de software, desde el pago hasta el reconocimiento, y verás grandes mejoras en cómo se formatea tu código y tus pruebas.

Y estoy diciendo que este no es tu código ofuscado y minificado, ¿verdad?, obviamente eso será un archivo. Pero cuando estamos llegando a ese punto, sabes que si quieres encontrar ciertas cosas, cómo estructurar tu código. Desafortunadamente, la gente no siempre hace eso. Con sus pruebas, no saben cómo arquitecturarlas. Y esto puede parecer controvertido, pero es por eso que es importante que tus SDETs o tus ingenieros de desarrollo de software en pruebas, se tomen el tiempo para saber lo que están haciendo. No les asignes a un junior y digas, este es tu problema. No les asignes a un tester exploratorio. Trata a tus SDETs como tratarías a tus ingenieros de software, desde el pago hasta el reconocimiento, y verás grandes mejoras en cómo se formatea tu código y tus pruebas.

5. División de Pruebas y Gestión de la Complejidad

Short description:

Divide tus pruebas. Asegúrate de que puedas ejecutar cada prueba individualmente, al igual que lo harías si estuvieras dividiendo tu código de producción. Y por eso necesitamos adoptar esta mentalidad de que, cuando estás escribiendo código, estás escribiendo código, ya sea una prueba automatizada o código de producción. Así que asegúrate siempre de que cuando estemos dividiendo estas cosas, las dividamos y luego probemos donde van nuestros usuarios finales. Al dividir las cosas en partes más manejables, eliminaremos la inestabilidad. Cuanto más pequeñas sean tus pruebas, menos inestables serán.

Entonces, sabemos que no vamos a crear monolitos en nuestro código de producción cuando lo estamos escribiendo todo antes de que se integre en nuestro sistema de construcción. Así que no lo hagas cuando estés en tu entorno de pruebas.

Divide tus pruebas. ¿Cada buena presentación es un buen meme, verdad? Divide tus pruebas. Si estás probando partes modulares pequeñas, divídelas. Asegúrate de que puedas ejecutar cada prueba individualmente, al igual que lo harías si estuvieras dividiendo tu código de producción, ¿verdad? La gente dice, sí, sí, puedo dividir mi código. Sé cómo descomponer esto, ¿verdad? Dices lo mismo para las pruebas y ellos dicen, es una prueba, ¿por qué importa? Importa. De verdad, importa.

Y por eso necesitamos adoptar esta mentalidad de que, cuando estás escribiendo código, estás escribiendo código, ya sea una prueba automatizada o código de producción, ¿verdad? O cualquier cosa intermedia. El código es código. Tus estetas son ingenieros. Ellos escriben código. Tus ingenieros de software, ellos escriben código. Son exactamente lo mismo. Miran los problemas ligeramente de manera diferente, pero siguen mirando el problema. Así que es importante asegurarnos de que cuando estemos dividiendo estas cosas en partes individuales, lo hagamos de manera significativa.

Así que hemos hablado de esto, donde tenemos nuestras pruebas unitarias, nuestras pruebas de servicio, pero esa parte grande y voluminosa de la interfaz de usuario, podemos descomponerla aún más. No necesitamos una prueba de extremo a extremo completa para nuestras pruebas de interfaz de usuario. Sí, es posible que necesitemos un navegador, y es importante asegurarnos de que probamos en todos los navegadores que utilizan nuestros usuarios. Si vas a probar en Chrome, prueba en Chrome, Chromium va a reaccionar ligeramente diferente. Así que si pruebas en Chromium, no siempre obtendrás la misma experiencia final que un usuario de Edge, o un usuario de Chrome, o un usuario de Brave, o un usuario de Opera o Vivaldi, ¿verdad? Es el mismo navegador en el fondo para el motor, pero no siempre te dará el mismo resultado cuando estés moviendo las cosas debido a la forma en que lo configuran y lo envían. Lo mismo ocurre al usar WebKit. WebKit puede ser la herramienta y el motor subyacente para Safari, pero hay momentos en los que Safari actuará de manera muy diferente a WebKit, y actuará de manera muy diferente a Safari en iOS. Así que asegúrate siempre de que cuando estemos dividiendo estas cosas, las dividamos y luego probemos donde van nuestros usuarios finales. Porque de esa manera, podemos saber que hemos hecho el trabajo correcto.

Ahora, al dividir las cosas en partes ligeramente más manejables, eliminaremos la inestabilidad. Cuanto más pequeñas sean tus pruebas, menos inestables serán. Seguro que todos han intentado escribir pruebas de extremo a extremo, y muchas veces, necesitas alinear muchas cosas para que funcione. Tu base de datos necesita estar configurada, tu middleware necesita estar configurado, tu frontend necesita estar funcionando, y cada vez que haces algo, necesita poder pasar por todas estas capas y luego volver. Y como estamos hablando de JavaScript, todo es asíncrono. Así que necesitas alinear muchas cosas para que las cosas funcionen.

6. Descomposición de las Pruebas de Interfaz de Usuario

Short description:

Las pruebas de interfaz de usuario tardan demasiado en ejecutarse, por lo que debemos descomponerlas en componentes más pequeños. Aquí tienes un ejemplo de una prueba pequeña que comienza desde un punto conocido, realiza una acción con una afirmación y sabe a dónde regresar. La prueba carga un componente React para un formulario de lista de tareas y realiza acciones como establecer valores. Descomponer las pruebas en partes más pequeñas ayuda a mejorar la eficiencia de las pruebas.

A veces funcionará y tendrás medios para probar cosas, así que al trabajar en NightwatchJS, que se basa en Selenium, hace todo el autowaiting para que puedas saber cuándo están las cosas. Pero necesitas saber que esa cosa estará ahí. Y por eso necesitamos descomponer las cosas, hacerlas más pequeñas, y vamos a descomponer las pruebas de interfaz de usuario. Porque las pruebas de interfaz de usuario, las pruebas de extremo a extremo tardan demasiado en ejecutarse. ¿De acuerdo? Seamos claros. No es suficiente.

Entonces, ¿cómo lo vamos a dividir? Sigo diciéndolo, necesitamos dividirlo, pero ¿cómo vamos a poder dividirlo en realidad? Tengo un ejemplo. Y vamos a echarle un vistazo. Así que aquí... Aquí... Aquí tienes una prueba pequeña, ¿de acuerdo? Es realmente, realmente pequeña. Y recomiendo a todos los que escriben pruebas, especialmente pruebas de extremo a extremo, que sus pruebas hagan como máximo tres cosas. Comienzan desde un buen punto conocido, hacen una cosa, pero una cosa muy bien con una afirmación, si no hace una afirmación, no es una prueba útil. Y luego sabe a dónde regresar. Y así, en este caso, tengo aquí un poco de código de demostración. Y déjame hacerlo realmente grande. Y voy a hacer zoom, para que puedas leerlo. Aquí tenemos algunas pruebas de componentes. Tenemos un componente React que voy a cargar. Y si quieres ver cómo se ve, simplemente se ve como un componente React estándar. Este es un formulario para una lista de tareas. Así que toma todo, tiene sus entradas, tiene algún cambio de estado y tiene el botón de envío. Muy, muy simple, ¿verdad? Y todos pueden ver qué es, pueden trabajar con ello. Todos han trabajado con React, así que estoy bastante seguro de que nada de esto te sorprende. Pero lo importante aquí es que podemos escribir la prueba para poder, como una especie de, cargar un componente. Cargar un componente, en este caso, podemos esperar que sea visible, que vamos a trabajar con él.

Ahora, he hecho algo muy simple aquí, pero podríamos simplemente descomponerlo y hacer cosas. Así que, como es de noche, esta es una prueba de night watch, es muy simple. Tiene una API fluida agradable para que puedas trabajar con ella. Y puedes hacer más cosas. Así que podrías hacer, esperar al navegador, encontrar el elemento, componente, y descomponerlo y luego ingresar en él, si quieres escribir algo, puedes establecer el valor, Me encanta el queso, porque sí. Y eso funcionaría.

7. Mantener las Dependencias de Prueba Actualizadas

Short description:

Necesitamos menos pruebas de extremo a extremo y más pruebas de componentes pequeñas y modularizadas. Mantén tus dependencias de prueba actualizadas, idealmente utilizando bots. Actualiza regularmente los paquetes de npm y aprovecha las nuevas características. Mantén tus dependencias de prueba tan actualizadas como las de producción. No descuides la actualización del código de prueba.

Podrás interactuar, y ahora en lugar de una prueba de extremo a extremo completa, no vamos a comprobar que podamos enviar todo hasta la database. Esas pruebas siguen siendo útiles, pero necesitamos menos de ellas y muchas más de este tipo de pruebas de componentes pequeñas y modularizadas. Y podemos simplemente usar los mismos componentes que hemos estado usando antes. Así que es realmente, realmente simple.

Otra cosa en la que creo que es importante que las personas se centren es asegurarse de que una vez que hayas hecho que tu prueba funcione, mantengas todos tus elementos actualizados, todos tus paquetes de npm. Así que en este caso, como ejemplo, se lanzó un nuevo controlador Gecko y una nueva versión de Nightwatch. npm update debe usarse en todas tus dependencias de prueba todo el tiempo, mantenlo actualizado regularmente. Idealmente, configura un bot para hacerlo. Esto es solo trabajo ocupado para una persona. Y por eso deberías usar bots cuando sea posible. Y llegaremos a eso en un segundo.

Pero asegúrate de que al menos ejecutes npm updated una vez por sprint en tu trabajo, para que puedas mantener las cosas actualizadas. Y puedes comenzar a usar nuevas características de inmediato. Con Nightwatch, enviamos Selenium bajo el capó. Y permitimos a las personas hacer cosas realmente geniales como la intercepción de red, manejo básico de autenticación, mensajes de error de la consola de JavaScript, captura para que puedas fallar las pruebas si tu JavaScript no es muy bueno. O si quieres buscar ciertas mutaciones en la página, puedes configurarlo todo y ser capaz de hacerlo. Y esas cosas salen regularmente y se actualizan. Y es importante que mantengas tus dependencias de prueba tan actualizadas como las de producción. No digas, oh, es una prueba. No necesita ser actualizada. Hay buenas razones por las que se actualizan regularmente. Y este es un buen ejemplo.

Estas son las versiones de Nightwatch que existen. Y tenemos personas en todo el espectro. Y he tomado solo un pequeño fragmento de nuestra base de usuarios. Y es importante que mantengas las cosas actualizadas. Entiendo que algunos proyectos nunca necesitan ser actualizados. Pero si no estás actualizando el código de producción, entonces no actualizarás el código de prueba. Si es así, está bien, pero si estás haciendo actualizaciones en tus dependencias en tu código de producción, asegúrate de hacerlo también en tu código de prueba. Es importante.

8. Herramientas para el Flujo y la Eficiencia

Short description:

Encuentra herramientas que te mantengan en flujo, como la extensión de VS Code de Nightwatch. Te permite ejecutar pruebas, incluidas las pruebas de componentes, sin salir de tu entorno de codificación. Mantén el enfoque y la eficiencia minimizando la necesidad de aprender nuevos comandos o cambiar de herramientas.

Y finalmente, ten tooling que te mantenga en flujo. Yo uso VS Code todo el tiempo. Y en el momento en que tengo que salir de VS Code, sé que para mí, puedo distraerme fácilmente. Así que trata de encontrar tooling que te mantenga en flujo, que te mantenga trabajando, que te mantenga en donde necesitas estar. Como dije, trabajo con Nightwatch. Nightwatch tiene una extensión de VS Code para poder ejecutar pruebas. Todo lo que necesito hacer es hacer clic en un botón. Me muevo a mis pruebas, puedo ejecutarlas. Puedo ejecutarlas en diferentes entornos. Puedo ejecutar mis pruebas de componentes. Puedo ejecutar todo desde donde estoy. En el momento en que necesitas aprender nuevos comandos, nuevas cosas, te saca del flujo. Así que trata de encontrar esa herramienta que te mantenga donde estás. Te ayuda a probar tus componentes desde el principio y luego te mantiene en flujo. Así fluye cuando estás trabajando, estás concentrado, estás trabajando duro y todo está bien. Así que sigue adelante.

QnA

Resultados de la Encuesta del Público y Pruebas de Componentes

Short description:

Soy el probador automatizado. Trabajo en Nightwatch y Selenium. Los resultados de la encuesta del público fueron los esperados, con las pruebas de regresión visual siendo populares. Sería genial si más personas comenzaran a hacer pruebas de accesibilidad. Al probar, enfóquese en descomponer los componentes en las partes más pequeñas y extender desde allí.

Y eso es todo, amigos. Espero que hayan encontrado esto realmente útil. Como dije antes, mi nombre es David Burns. Soy el probador automatizado. Trabajo en Nightwatch y Selenium. Y si tienen alguna pregunta, pueden encontrarme en las redes sociales o en Discord o Slack. Y siempre estoy dispuesto a ayudar. Gracias.

Entonces tenían una pregunta, que le hicimos al público antes de su charla, es como, ¿hacen otras cosas de testing? Las respuestas son como las pruebas de regresión visual están en un 62%, y las pruebas de accesibilidad están en un 38%, y las pruebas de rendimiento están en un 37%. Entonces, ¿qué piensan de estos resultados? Es más o menos lo que esperaba. Es algo en lo que he estado investigando recientemente, y tenía mucha curiosidad por lo que la gente estaría haciendo. Creo que las pruebas de regresión visual son bastante populares en este momento. Así que sí, coincide con lo que esperaba. Así que eso es bueno. Al menos mi intuición estaba en lo correcto allí. Genial. Sería bueno si la gente comenzara a hacer más pruebas de accesibilidad también. Definitivamente. Sin duda. Sí. Así que tenemos preguntas para ustedes. Entonces, la primera pregunta es, ¿con qué componentes trabajan primero al testing? Supongo, sí. ¿Con qué componentes trabajan primero? Sí. En este caso, creo que es cómo la gente lo descompone. ¿Verdad? Entonces, ya saben, con su, cuando pasan al código de producción, ¿verdad?, tratan de ir por la pieza más pequeña. Y así, lo que puedan lograr hasta ese punto es el área en la que creo que deben enfocarse. Y así que si pueden, como sé que mucha gente mira cosas como storybook o lo que sea, ¿verdad?, se trata de tratar el código, su código de prueba como código de producción, ¿verdad? Y así que si van a hacer pruebas de componentes, hagan eso. Y miran sus componentes, los descomponen, y luego los extienden hacia afuera. Así es como suelo hacerlo. No tengo un área en la que me enfoque, pero encuentro la que es más importante.

Snapshot Testing and Conflicting Feelings

Short description:

Epster pregunta sobre las buenas prácticas para las pruebas de instantáneas. Existen sentimientos encontrados al respecto. Las instantáneas deben hacer lo que se espera, pero a veces se reescriben o anulan. Pueden ser útiles para identificar errores, pero también frustrantes. Las pruebas visuales siguen un patrón similar. Es un tema desafiante.

La mejor lógica empresarial, cosas así. Sí, genial. Sí, definitivamente. Entonces, Epster pregunta cuáles son las buenas prácticas para las pruebas de instantáneas. Tengo sentimientos encontrados al respecto y muchos de ellos realmente entran en conflicto, lo cual me parece bastante interesante. Volviendo a las instantáneas, siempre debes intentar que haga lo que crees que va a hacer y mantenerlo así, ¿verdad? Y luego, algo en lo que he estado trabajando recientemente es tratar de extender algunos de los proyectos en los que estoy trabajando para que funcionen con NX, la herramienta de monorepo. Eso utiliza muchas pruebas de instantáneas. Y hay momentos en los que simplemente tengo que concentrarme en esto, hacerlo bien, y luego hay momentos en los que simplemente digo, voy a reescribir todo y anular las instantáneas. Y en cierto modo, y así pierdo rápidamente el valor en ello. Pero al mismo tiempo, también puedo usarlo para darme cuenta de que he cometido un gran error. Y así es como suelo hacerlo. Es lo mismo con las pruebas visuales. Tomo mis instantáneas y a veces es como, en realidad solo quiero reescribir todo y desecharlo todo porque es simplemente frustrante. Y ahí es donde lo encuentro útil. Y a veces lo encuentro frustrante. Así que tengo estas cosas contradictorias en mi cabeza. Así que es difícil.

Desafíos de las Pruebas de Instantáneas

Short description:

Las pruebas de instantáneas pueden volverse demasiado pesadas de mantener si no se realizan correctamente. Actualizar las instantáneas sin entender por qué se rompieron falsifica el proceso real. Existen razones contradictorias para las pruebas de instantáneas.

Sí, quiero decir, ciertamente para mí, cuando escucho por primera vez pruebas de instantáneas, en realidad solo pienso en las pruebas de instantáneas, que solíamos hacer para React. Y así que cuando comenzamos, pensamos, sí, deberíamos hacer pruebas de instantáneas para todo. Y pronto se vuelve demasiado pesado de mantener porque estás haciendo cualquier cambio. Y simplemente sigues adelante sin pensar y ejecutas hyphen U y actualizas la instantánea. Como la mayoría de las personas, no creo eso. Sí, así que no hay práctica en la que las personas realmente vayan y vean si la instantánea se rompió, ¿por qué se rompió? Entonces, tal vez falsifica el proceso real, una razón para las pruebas de instantáneas. Pero sí, nuevamente, razones contradictorias, como dijiste.

Beneficios de las Pruebas de Componentes

Short description:

Las pruebas de componentes permiten descomponer el código en partes más pequeñas y manejables, asegurando la corrección y velocidad. Abordan los desafíos de la asincronía y las promesas anidadas. Al organizar las pruebas en archivos específicos y enfocarse en los puntos correctos, las pruebas se pueden ejecutar rápidamente. La accesibilidad y las pruebas visuales también son más rápidas cuando se realizan en componentes más pequeños.

Entonces hay otra pregunta. ¿Por qué hacer pruebas de componentes cuando se pueden hacer pruebas de extremo a extremo para verificar las cosas? Sí, eso es lo que más me gusta en este momento. Al principio, dije que debes descomponer tu código, descomponer todo. Así avanzas en la menor cantidad de partes. Correcto. Lo que me gusta de hacer eso y luego tratar tu código como producción y luego ir, lo que ha llevado a esta creencia en las pruebas de componentes, en la que estoy 100% de acuerdo, es la idea de que puedes simplemente ir, voy a hacer las partes pequeñas, asegurarme de que esta pequeña parte sea correcta, lo cual será súper rápido. Porque, habiendo trabajado en navegadores, lo que siempre noté es que a muchas personas les cuesta entender conceptos como la asincronía. Incluso si trabajas con JavaScript todos los días, aún hay momentos en los que JavaScript simplemente dice. Pero solo voy a responder ahora. Así que has estado esperando, o has escrito este infierno de devolución de llamada, o tienes estas promesas anidadas, y piensas, bueno, esto no va a funcionar. Y así lo estamos descomponiendo. Como lo harías en producción, asegurándote de que tus pruebas estén en archivos específicos, tus pruebas estén haciendo lo mismo en los puntos correctos. Y no te estás enfocando en demasiadas cosas diferentes, entonces llegas a esta capacidad de ejecutarlas más rápido, súper rápido. Y luego, si quieres hacer tus pruebas de accesibilidad, tus pruebas visuales, serán aún más rápidas que si hicieras una página completa para hacer tu prueba. Así que todo se trata de la velocidad de esa manera. Gracias. Así que tengo otra pregunta, que es como hablaste de las herramientas, ¿verdad? Como, deberíamos mantener nuestras herramientas que nos mantienen en flujo. ¿Tienes alguna preferencia de herramientas? ¿Qué tipo de herramientas usas cuando se trata de pruebas de UI o integración, y así sucesivamente? En cuanto a las herramientas, no uso demasiado. Soy un desarrollador de Visual Code, desarrollo en Visual Code. No desarrollo Visual Code. Y encuentro todas las cosas que necesito que son importantes para mantenerme en ese espacio. Encuentro las extensiones que hacen esos trabajos por mí, ¿verdad? En el momento en que siento que necesito salir de algo, entonces veo poco valor. Así que no tengo una herramienta específica, pero es la herramienta que encuentro útil para la tarea en este momento. Y luego trato de optimizar en torno a eso, y así, pueden ser cosas simples. Así que simplemente aprender a no usar el mouse, navegar solo con el teclado si puedes, porque así obtienes mucha más velocidad, mucho más flujo y cosas así. Y también puedes probar la accesibilidad. Exactamente. Definitivamente. Sí. Muchas gracias, David, por unirte hoy. Nuevamente, fue una gran charla y por estar allí para las preguntas y respuestas. A pesar de todos los problemas. Gracias. No, gracias. Gracias a todos. Espero que lo hayan disfrutado. Si tienen alguna otra pregunta, siempre pueden enviarme un mensaje en Twitter o algo así, así que estaré encantado de ayudar.

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

DevOps.js Conf 2024DevOps.js Conf 2024
25 min
Atomic Deployment for JS Hipsters
Deploying an app is all but an easy process. You will encounter a lot of glitches and pain points to solve to have it working properly. The worst is: that now that you can deploy your app in production, how can't you also deploy all branches in the project to get access to live previews? And be able to do a fast-revert on-demand?Fortunately, the classic DevOps toolkit has all you need to achieve it without compromising your mental health. By expertly mixing Git, Unix tools, and API calls, and orchestrating all of them with JavaScript, you'll master the secret of safe atomic deployments.No more need to rely on commercial services: become the perfect tool master and netlifize your app right at home!
TestJS Summit 2021TestJS Summit 2021
36 min
Effective Performance Testing to your Server with Autocannon
Top Content
Performance testing expertise that is developed for a long time. In order to measure your server performance you need a tool that can efficiently simulate a lot of abilities and give you good measurements according your analysing criteria.Autocannon NPM library gave me exactly that - that library is super easy to install and has a very simple API to work with. Within a really short amount of time you can start do performance testing to your application and get good measurements in development environment and in your performance labs, and generate complicated testing scenarios.In this talk I will introduce Autocannon, explain how to efficiently analyse your server performance with it, and show how it helped me to understand complicated performance issues in my Node.js servers. At the end of this lecture, developers will be able to have the ability to integrate a fast and easy tool in order to measure your server performance.
TestJS Summit 2022TestJS Summit 2022
21 min
Delightful Integration Tests With Testcontainers
Top Content
Dockerized services are an excellent tool for creating repeatable, isolated environments ideal for integration tests. In this session, we'll look at the Testcontainers libraries which provide flexible and intuitive API for programmatically controlling lifecycle of your service dependencies in Docker containers. Running databases, Kafka, Elasticsearch, and even cloud technologies, straight from your test code ensures environment config is always up-to-date and consistent during local development and in CI pipelines.You’ll learn everything necessary to start adding powerful integration tests to your codebase without the headache of managing external service dependencies manually!
TestJS Summit 2022TestJS Summit 2022
23 min
Playwright Can Do This?
Guaranteeing that your application doesn't break while constantly shipping new features is tough. Obviously, with a continually growing app or site, you can't test everything manually all the time!Test automation and monitoring are crucial to avoiding shipping broken apps and sites. But what functionality should you test? When should you run your tests? And aren't complex test suites super slow?In this session, we'll get our hands on Playwright, the end-to-end testing framework, and learn how to automate headless browsers to ensure that you confidently ship new features.
DevOps.js Conf 2022DevOps.js Conf 2022
22 min
The Lazy Developer Guide: How to Automate Code Updates?
How to update hundreds of projects all at once? With organizations rapidly growing, demand for the scalability of the teams grows which directly impacts projects structure and ownership. The usual dilemma is mono- vs. multi-repos, but ... What if I tell you that it does not matter much? Both approaches can punch you in the face at some point, so perhaps it is better to think bottom-up.
Today I will walk you through some of the biggest challenges that exist in both approaches and those are managing dependencies across a few hundred projects, global code updates and many other things. I will also show you examples of how we solved this inside Infobip through building our own internal libraries.

Workshops on related topic

TestJS Summit 2021TestJS Summit 2021
85 min
Automated accessibility testing with jest-axe and Lighthouse CI
Workshop
Do your automated tests include a11y checks? This workshop will cover how to get started with jest-axe to detect code-based accessibility violations, and Lighthouse CI to validate the accessibility of fully rendered pages. No amount of automated tests can replace manual accessibility testing, but these checks will make sure that your manual testers aren't doing more work than they need to.
TestJS Summit 2022TestJS Summit 2022
163 min
Automated Testing Using WebdriverIO
Workshop
In this workshop, I cover not only what WebdriverIO can do, but also how you'll be using it day-to-day. I've built the exercises around real-world scenarios that demonstrate how you would actually set things up. It's not just "what to do," but specifically "how to get there." We'll cover the fundamentals of Automated UI testing so you can write maintainable, useful tests for your website and/or web app.
TestJS Summit 2021TestJS Summit 2021
111 min
JS Security Testing Automation for Developers on Every Build
WorkshopFree
As a developer, you need to deliver fast, and you simply don't have the time to constantly think about security. Still, if something goes wrong it's your job to fix it, but security testing blocks your automation, creates bottlenecks and just delays releases...but it doesn't have to...

NeuraLegion's developer-first Dynamic Application Security Testing (DAST) scanner enables developers to detect, prioritise and remediate security issues EARLY, on every commit, with NO false positives/alerts, without slowing you down.

Join this workshop to learn different ways developers can access Nexploit & start scanning without leaving the terminal!

We will be going through the set up end-to-end, whilst setting up a pipeline, running security tests and looking at the results.

Table of contents:
- What developer-first DAST (Dynamic Application Security Testing) actually is and how it works
- See where and how a modern, accurate dev-first DAST fits in the CI/CD
- Integrate NeuraLegion's Nexploit scanner with GitHub Actions
- Understand how modern applications, APIs and authentication mechanisms can be tested
- Fork a repo, set up a pipeline, run security tests and look at the results
GraphQL Galaxy 2021GraphQL Galaxy 2021
82 min
Security Testing Automation for Developers on Every Build
WorkshopFree
As a developer, you need to deliver fast, and you simply don't have the time to constantly think about security. Still, if something goes wrong it's your job to fix it, but security testing blocks your automation, creates bottlenecks and just delays releases, especially with graphQL...but it doesn't have to...

NeuraLegion's developer-first Dynamic Application Security Testing (DAST) scanner enables developers to detect, prioritise and remediate security issues EARLY, on every commit, with NO false positives / alerts, without slowing you down.

Join this workshop to learn different ways developers can access NeuraLegion's DAST scanner & start scanning without leaving the terminal!

We will be going through the set up end-to-end, whilst setting up a pipeline for a vulnerable GraphQL target, running security tests and looking at the results.

Table of contents:
- What developer-first DAST (Dynamic Application Security Testing) actually is and how it works
- See where and how a modern, accurate dev-first DAST fits in the CI/CD
- Integrate NeuraLegion's scanner with GitHub Actions
- Understand how modern applications, GraphQL and other APIs and authentication mechanisms can be tested
- Fork a repo, set up a pipeline, run security tests and look at the results