El Arte de las 'Vistas Humildes': Probando Aplicaciones React Native de Manera Inteligente

Rate this content
Bookmark

En esta charla, exploramos el mundo divisivo de las pruebas, donde los desarrolladores a menudo se encuentran divididos entre no escribir pruebas y esforzarse por una cobertura de pruebas del 100%. Aprenda a navegar estas posiciones polarizantes y adopte una estrategia más matizada que hace que las pruebas sean eficientes y efectivas. Profundizaremos en el concepto de 'Vistas Humildes', donde minimizamos los objetos no probables extrayendo la lógica de los elementos de la interfaz de usuario a partes amigables para pruebas del código base. Este enfoque simplifica las pruebas, centrándose en la lógica de negocio en lugar de las complejidades de la interfaz de usuario. Descubra cómo la arquitectura Modelo-Vista-Presentador (MVP) ayuda a lograr esto, con los presentadores sirviendo como una capa lógica para las pruebas y los hooks ayudando a separar la lógica de los componentes de la interfaz de usuario. A lo largo de la charla, discutiremos los compromisos de este enfoque, el papel de las pruebas de extremo a extremo (E2E), y cómo lograr el equilibrio perfecto entre demasiadas y pocas pruebas. ¡Únase a nosotros mientras nos adentramos en el arte de crear 'Vistas Humildes', asegurando que nuestras aplicaciones React Native sean escalables, mantenibles y efectivamente probadas!

FAQ

La arquitectura de código son las decisiones que desearías poder acertar al principio de un proyecto, según Ralph Johnson, profesor de ciencias de la computación en los Estados Unidos.

La separación de preocupaciones en la arquitectura de software implica dividir una aplicación en distintos componentes o módulos, cada uno de los cuales es responsable de una parte específica de la funcionalidad de la aplicación, operando independientemente de las demás partes.

React desafía la separación de preocupaciones tradicional al combinar HTML, JavaScript y CSS en un solo componente con JSX, lo que permite una integración más estrecha pero viola la antigua norma de separar la estructura, la presentación y el comportamiento.

El modelo HumbleObject es un patrón de diseño que ayuda a separar la lógica de negocio de la infraestructura de un componente, facilitando las pruebas al permitir que se enfoquen en la lógica de negocio pura en lugar de dependencias externas.

El patrón MVP ayuda al separar el modelo (lógica de negocio y datos) de la vista (interfaz de usuario), donde la vista se convierte en pasiva y es solo una representación, mientras que el presentador maneja la lógica de interacción, facilitando así las pruebas y mantenimiento.

Seguir patrones arquitectónicos ayuda a estructurar mejor el código, hace más fácil la mantenibilidad, mejora la eficiencia en las pruebas y prepara a los desarrolladores para el éxito al reducir la complejidad en las bases de código grandes.

Mo Khazali
Mo Khazali
32 min
07 Dec, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Esta charla discute los desafíos de las pruebas en las aplicaciones React y React Native, particularmente con respecto al escaneo de códigos de barras. Explora la violación de la separación de preocupaciones en React y propone el uso del modelo HumbleObject para simplificar las pruebas y mejorar la limpieza del código. También se introduce el modelo MVP como una forma de separar el estado de la interfaz de usuario y la lógica del componente. Se enfatiza la importancia de seguir patrones, la estandarización y los principios de enseñanza, junto con los beneficios de usar hooks personalizados para compartir la lógica de negocio. También se menciona el potencial de las herramientas de IA en la refactorización del código.

1. Introducción a las Vistas Humildes y Pruebas

Short description:

Hola a todos. Muchas gracias, Nathaniel. Esa fue sinceramente una introducción muy amable. Hoy estoy emocionado de estar en Berlín hablando sobre las vistas humildes en las aplicaciones de React y React Native. Dirijo el equipo móvil en el Reino Unido para Theodo, una consultoría global con experiencia en React y React Native. Las pruebas son un tema polémico con diferentes puntos de vista, desde apuntar a un 100% de cobertura de pruebas hasta no hacer pruebas en absoluto.

♪♪♪ Hola a todos. Muchas gracias, Nathaniel. Esa fue sinceramente una introducción muy, muy amable. Me siento humilde. Vamos. Bueno, los chistes de papá no caen muy bien aquí. Bueno saberlo. Bien, de acuerdo. Así que hoy estoy muy emocionado de estar en Berlín con todos ustedes. Es mi primera vez en la ciudad, y es tan estéticamente agradable. Las vibraciones son sinceramente impecables, especialmente con la nieve. Estoy muy emocionado de hablar sobre este concepto de vistas humildes. Vamos a ver cómo puedes arquitecturar tus aplicaciones de React y React Native para, con suerte, facilitar un poco las pruebas y también hacer que tus aplicaciones sean más escalables.

Un poco sobre mí. Como mencionó Nathaniel, mi nombre es Mo. Dirijo el equipo móvil en el Reino Unido para Theodo. Así que Theodo es una consultoría global con más de 700 expertos digitales, 150 de los cuales hacen React Native y React. Así que hemos estado haciendo React y React Native desde los primeros días de su aparición. Y como resultado, hemos pasado por fases de evolución y hemos visto diferentes bases de código y hemos visto diferentes patrones e intentado encontrar los que duran mucho tiempo y son escalables y esperamos poder compartir algo de eso con ustedes hoy.

Así que las pruebas son un tema polémico. La gente suele caer en dos campos. Si sigues la ruta del artesano del software, te encuentras con gente como Bob Martin, que cree firmemente que debes apuntar a un 100% de cobertura de pruebas, que una alta cobertura de pruebas es la piedra angular de una buena base de código. Así que esta es la visión tradicional, y esta es la visión que te dirá el artesano del software. Más recientemente, por otro lado, tienes a los influencers de YouTube en el espacio de la codificación que te dirán, ¿sabes qué? No he estado probando durante años y he sido muy rápido, nunca podrás alcanzarme. Trabajé en Twitch, confía en mí, hermano. Y entonces obtienes estos diferentes puntos de vista y tienes gente que está vehementemente en contra de las pruebas y tienes gente que está muy, muy a favor de las pruebas. Y así, como con muchas cosas en la vida estos días, las cosas se polarizan al extremo. A la izquierda, tienes a la gente que dice, no pruebes. Y si pruebas, nunca más me hables. Y luego a la derecha, tienes gente que dice, tu código es malo, deberías estar probando cada parte de él.

2. Desafíos con las Pruebas del Escáner de Códigos de Barras

Short description:

Tienes esta tierra de nadie de pruebas en el medio donde se pierde toda la sutileza. Mi objetivo es molestar a ambas partes con una charla. Permíteme establecer el escenario: un proyecto de React Native en la industria de la moda. Un desarrollador quería probar el escáner de códigos de barras pero se encontró con desafíos en la configuración. Se requerían múltiples contextos y simulacros para las pruebas.

Y realmente, lo que sucede es que tienes esta tierra de nadie de testing en el medio donde se pierde toda la sutileza. Y a veces se lanzan tomates desde ambos lados. Pero realmente, no se tienen muchas conversaciones matizadas en torno a un enfoque pragmático de testing. Y me considero un poco centrista. No defiendo nada. Así que mi objetivo es molestar a ambas partes con una charla. Veremos cómo va esto.

Permíteme establecer un poco el escenario. Así que hace un par de años, estaba trabajando en un proyecto de React Native en la industria de la moda. La aplicación iba a ser utilizada en almacenes donde iban a escanear artículos de ropa con un escáner de códigos de barras dentro de la aplicación. Y almacenaría alguna información. Podrían introducir información sobre el artículo de ropa. Y estaba siendo utilizado por la oficina de atrás, efectivamente. Había una desarrolladora en mi equipo que estaba trabajando mucho en las cosas de front end. Y en un momento me dijo, estoy intentando escribir una prueba para el escáner de códigos de barras. Básicamente, lo que quiero probar es que cada código de barras tiene un checksum. Los últimos dígitos serán una suma de algunos de los valores en el medio en alguna fórmula matemática. Así que quiero probar eso. Pero el desafío que encontró fue que necesitaba hacer mucha configuración antes de que pudiera realmente probar eso al renderizar la pantalla. ¿Y a qué me refiero con eso? De hecho, extraje el código y verás lo horroroso que es en solo un segundo. Pero esta pantalla inicialmente tenía un montón de contextos diferentes. Y realmente no los necesitábamos para la pantalla en sí. Pero necesitaba ser simulado para que pudieran seguir adelante y probarlo. Genial. Así que eso es un montón de simulacros. Luego, algunos de los clientes necesitaban ser simulados para las solicitudes de fetch. El escáner de códigos de barras de Expo, que era una biblioteca externa que utiliza el dispositivo nativo, también necesitaba ser simulado porque no tienes acceso a eso en las pruebas unitarias. Tu marco de navegación en la capa nativa necesitaba ser simulado. Bien. Eso es más simulacros.

QnA

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

Desarrollo Efectivo de Pruebas
TestJS Summit 2021TestJS Summit 2021
31 min
Desarrollo Efectivo de Pruebas
Top Content
Los desarrolladores quieren dormir tranquilos sabiendo que no rompieron la producción. Las empresas quieren ser eficientes para satisfacer las necesidades de sus clientes más rápido y obtener una ventaja competitiva antes. TODOS queremos ser coste efectivos... o debería decir... ¡PRUEBA EFECTIVA!¿Pero cómo hacemos eso?¿Nos sirve bien la terminología de "unidad" e "integración"?¿O es hora de un cambio? ¿Cuándo deberíamos usar cada estrategia para maximizar nuestra "efectividad de prueba"?¡En esta charla te mostraré una nueva forma de pensar sobre las pruebas coste efectivas con nuevas estrategias y nuevos términos de prueba!¡Es hora de ir MÁS PROFUNDO!
Quizá No Necesitemos Pruebas de Componentes
Vue.js Live 2024Vue.js Live 2024
26 min
Quizá No Necesitemos Pruebas de Componentes
Las pruebas son obligatorias y las pruebas unitarias son la base para construir un buen sistema de pruebas para nuestro proyecto. Pero para proyectos de frontend que involucran componentes, ¿cuántas pruebas unitarias se consideran eficientes y no excesivas? ¿Deberíamos usar bibliotecas adicionales como Testing Library o Vue Test Utils con Vitest para probar un componente, cuando podemos hacer lo mismo solo con Playwright? ¿Realmente es necesario realizar una prueba de componente utilizando un framework de E2E como Playwright? Descubrámoslo en mi charla.
Pruebas de Componentes con Vitest
TestJS Summit 2023TestJS Summit 2023
29 min
Pruebas de Componentes con Vitest
Las pruebas son importantes. Las pruebas unitarias adecuadas pueden eliminar la posibilidad de que aparezcan errores. Pero, ¿qué marco de pruebas será adecuado? Exploremos cómo podemos desarrollar una estrategia confiable y eficiente para el desarrollo y prueba de componentes con Vitest
¡Es una trampa! - Trampas comunes en las pruebas y cómo solucionarlas
TestJS Summit 2021TestJS Summit 2021
20 min
¡Es una trampa! - Trampas comunes en las pruebas y cómo solucionarlas
Es una trampa` - una llamada o sensación con la que todos podríamos estar familiarizados, no solo cuando se trata de Star Wars. Señala un momento repentino de darse cuenta de un peligro inminente. Esta situación es una excelente alegoría para una desagradable realización en las pruebas. ¿Imagina tener las mejores intenciones cuando se trata de las pruebas pero aún así terminar con pruebas que no le brindan ningún valor en absoluto? ¿Pruebas que se sienten como un dolor para lidiar con ellas?
Cuando se escriben pruebas de frontend, hay muchas trampas en el camino. En resumen, pueden llevar a una mala mantenibilidad, un tiempo de ejecución lento y, en el peor de los casos, pruebas en las que no se puede confiar. Pero no tiene que ser así. En esta sesión, hablaré sobre los errores comunes de los desarrolladores (incluyendo los míos), al menos desde mi experiencia. Y, por supuesto, sobre cómo evitarlos. Después de todo, las pruebas no tienen por qué ser dolorosas.
Cómo detectar defectos de accesibilidad durante las pruebas unitarias y E2E
TestJS Summit 2021TestJS Summit 2021
7 min
Cómo detectar defectos de accesibilidad durante las pruebas unitarias y E2E
Para los desarrolladores, es mejor detectar cualquier defecto de accesibilidad durante las pruebas unitarias y E2E. Esta charla mostrará cómo automatizar las pruebas de accesibilidad utilizando jest y cypress.
Pruebas unitarias en aplicaciones Angular
TestJS Summit 2022TestJS Summit 2022
24 min
Pruebas unitarias en aplicaciones Angular
Angular ofrece muchas cosas de serie, incluyendo diversas funcionalidades relacionadas con las pruebas. Esta presentación demostrará cómo podemos aprovechar los sólidos fundamentos de las pruebas unitarias de Angular y aplicar ciertos patrones que facilitan las pruebas. Los temas tratados incluyen: dobles de prueba, patrón de prueba de módulo, arneses, "recetas" sobre cómo probar algunos casos comunes y más.

Workshops on related topic

Introducción a React Native Testing Library
React Advanced Conference 2022React Advanced Conference 2022
131 min
Introducción a React Native Testing Library
Workshop
Josh Justice
Josh Justice
¿Estás satisfecho con tus suites de pruebas? Si dijiste que no, no estás solo, la mayoría de los desarrolladores no lo están. Y hacer pruebas en React Native es más difícil que en la mayoría de las plataformas. ¿Cómo puedes escribir pruebas en JavaScript cuando el código JS y nativo están tan entrelazados? ¿Y qué diablos se supone que debes hacer con esa persistente advertencia de act()? Ante estos desafíos, algunos equipos nunca logran avanzar en las pruebas de su aplicación de React Native, y otros terminan con pruebas que no parecen ayudar y solo requieren tiempo adicional para mantener.
Pero no tiene que ser así. React Native Testing Library (RNTL) es una excelente biblioteca para pruebas de componentes, y con el modelo mental adecuado puedes usarla para implementar pruebas de bajo costo y alto valor. En este taller de tres horas aprenderás las herramientas, técnicas y principios que necesitas para implementar pruebas que te ayudarán a lanzar tu aplicación de React Native con confianza. Saldrás con una visión clara del objetivo de tus pruebas de componentes y con técnicas que te ayudarán a superar cualquier obstáculo que se interponga en ese objetivo.aprenderás:- Los diferentes tipos de pruebas en React Native, 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 de texto, imagen y código nativo para verificar e interactuar con ellos- El valor de las simulaciones y por qué no se deben evitar- Los desafíos con la asincronía en las pruebas de RNTL y cómo manejarlos- Opciones para manejar funciones y componentes nativos en tus pruebas de JavaScript
Requisitos previos:- Familiaridad con la construcción de aplicaciones con React Native- Experiencia básica en la escritura de pruebas automatizadas con Jest u otro framework de pruebas unitarias- No necesitas experiencia previa con React Native Testing Library- Configuración de la máquina: Node 16.x o 18.x, Yarn, ser capaz de crear y ejecutar con éxito una nueva aplicación Expo siguiendo las instrucciones en https://docs.expo.dev/get-started/create-a-new-app/