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!

This talk has been presented at TestJS Summit 2023, check out the latest edition of this JavaScript Conference.

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
This Talk introduces Test Effective Development, a new approach to testing that aims to make companies more cost-effective. The speaker shares their personal journey of improving code quality and reducing bugs through smarter testing strategies. They discuss the importance of finding a balance between testing confidence and efficiency and introduce the concepts of isolated and integrated testing. The speaker also suggests different testing strategies based on the size of the application and emphasizes the need to choose cost-effective testing approaches based on the specific project requirements.
Quizá No Necesitemos Pruebas de Componentes
Vue.js Live 2024Vue.js Live 2024
26 min
Quizá No Necesitemos Pruebas de Componentes
Component testing is a gray area between integration and unit testing. The demo app focuses on the cart component and writing test cases for Playwright component test and VTest. The first cart test encounters a bug with the invisible method in View Test.
Pruebas de Componentes con Vitest
TestJS Summit 2023TestJS Summit 2023
29 min
Pruebas de Componentes con Vitest
This Talk explores the challenges of choosing and learning testing frameworks, emphasizing the importance of planning, automation, and prioritizing unit testing. The VTEST framework is introduced as a fast and stable option for unit testing JavaScript and TypeScript code, with a focus on logic and mocking external dependencies. The Talk also covers testing React hooks, integration testing with TestingLibraryReact, component testing, and achieving code coverage. Best practices include performing accessibility tests, planning tests before coding, and using data test IDs for stability.
¡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
This Talk explores the pain points and best practices in software testing, emphasizing the importance of simplicity and comprehensibility in test design. It discusses techniques such as the three-part rule for test titles, the triple-A pattern for test structure, and the use of clear and descriptive names in tests. The Talk also highlights the traps of testing implementation details and using fixed waiting times. The speaker encourages teamwork and learning from experience to improve testing practices.
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
This Talk provides ways to catch accessibility defects during testing, including adding accessibility testing to a website for Studio Ghibli using React, NX, Jazz, JazzX, Cypress, and CypressX. The importance of unitizing components and conducting end-to-end testing with Cypress and CypressX is emphasized to ensure accessibility. The process of setting up CypressX testing is explained, highlighting the use of typings and the CypressX support file. These tools make it easier for developers to avoid accessibility bugs during development.
Mock Service Worker 2.0
TestJS Summit 2023TestJS Summit 2023
27 min
Mock Service Worker 2.0
MSW is an API mocking library that simplifies the process of intercepting requests and mocking responses. It leverages standard JavaScript APIs like the ServiceWorker API and the Fetch API. MSW has seen significant adoption, with over 90,000 projects on GitHub and 2.5 million weekly downloads on npm. The recent release of Node.js 18 has allowed for refactoring and simplification in MSW. MSW supports TypeScript and can be used for contract testing with tools like PACT I-O.

Workshops on related topic

Aprende a utilizar Composables: La navaja suiza de los desarrolladores de Vue
Vue.js Live 2024Vue.js Live 2024
163 min
Aprende a utilizar Composables: La navaja suiza de los desarrolladores de Vue
Workshop
Juan Andrés Núñez Charro
Juan Andrés Núñez Charro
Los Composables (funciones de composición) son funciones con estado/sin estado que pueden aprovechar la API de reactividad de Vue, desacoplándola de los componentes.Este cambio de perspectiva abre la posibilidad de abordar escenarios comunes de una manera nueva y creativa. En este masterclass, aprenderás cómo resolver problemas típicos que enfrenta cada desarrollador de Vue, utilizando composables:
- Almacenamiento de datos;- Comunicación entre componentes;- Funciones de utilidad (DOM, API, etc);Y más.
Mejores Prácticas y Consejos Avanzados de TypeScript para Desarrolladores de React
React Day Berlin 2022React Day Berlin 2022
158 min
Mejores Prácticas y Consejos Avanzados de TypeScript para Desarrolladores de React
Workshop
Maurice de Beijer
Maurice de Beijer
¿Eres un desarrollador de React que intenta obtener los mayores beneficios de TypeScript? Entonces este es el masterclass para ti.
En este masterclass interactivo, comenzaremos desde lo básico y examinaremos los pros y los contras de las diferentes formas en que puedes declarar componentes de React utilizando TypeScript. Después de eso, nos moveremos a conceptos más avanzados donde iremos más allá de la configuración estricta de TypeScript. Aprenderás cuándo usar tipos como any, unknown y never. Exploraremos el uso de predicados de tipo, guards y comprobación exhaustiva. Aprenderás sobre los tipos mapeados incorporados, así como cómo crear tus propias utilidades de mapeo de tipos. Y comenzaremos a programar en el sistema de tipos de TypeScript utilizando tipos condicionales e inferencia de tipos.
Introducción a React Native Testing Library
React Advanced 2022React Advanced 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/