Pruebas de extremo a extremo para API: Ahorrando Nervios y Horas

Rate this content
Bookmark

Tener una cobertura de pruebas adecuada significa mucho para una buena API. Pero lo que puede hacer que toda la vida sea patética es el interminable simulacro de datos y funciones para las pruebas de integración. Cada vez que cambias el código, necesitas arreglar la simulación. Después de varias iteraciones, el pensamiento correcto es: ¿qué salió mal?


Un enfoque alternativo son las pruebas de extremo a extremo para la API. Que requieren solo simulaciones mínimas y preparación de datos. El resto es código puro de tu API. Cambia el código, las pruebas de extremo a extremo siguen siendo las mismas.

Esta charla trata sobre mi experiencia de cambiar de las pruebas de integración a las pruebas de extremo a extremo para la API, pros y contras, y cómo empecé a sentirme feliz con las pruebas.

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

FAQ

Valentin Kononov es un desarrollador que trabaja principalmente con TypeScript y JavaScript, especialmente en el backend utilizando Node.js. Su experiencia incluye trabajar con el framework NestJS.

Las pruebas de extremo a extremo para API, como las que describe Valentin Kononov, involucran iniciar toda la API en un ambiente de prueba y verificar cada punto de integración detalladamente para asegurar que todos los componentes del sistema funcionen correctamente juntos.

Los beneficios de las pruebas de extremo a extremo incluyen una mayor facilidad para realizar cambios y modificaciones, así como la capacidad de probar todo el flujo de trabajo, lo que resulta en pruebas más legibles y que sirven como documentación adicional para la API.

Las pruebas de integración suelen enfocarse en módulos individuales y sus interacciones con dependencias simuladas, mientras que las pruebas de extremo a extremo involucran la ejecución de toda la aplicación en un entorno de prueba para asegurar la funcionalidad completa del sistema.

En Nest.js, se puede simular la autenticación utilizando guardias que se escriben una vez y se utilizan en todas partes, facilitando la configuración inicial y el manejo de autenticación en las pruebas de extremo a extremo.

Uno de los principales desafíos de las pruebas de integración es la necesidad de actualizar constantemente las dependencias simuladas cada vez que se realiza un cambio en el código, lo que puede ser muy tiempo y recursos intensivo.

Valentin Kononov sugiere un truco para simular fechas tanto para la función 'now' como para el constructor, lo que ayuda a asegurar la consistencia de los datos en situaciones donde la fecha actual es crucial para la prueba.

Valentin Kononov
Valentin Kononov
8 min
19 Nov, 2021

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Esta charla discute el uso de pruebas de extremo a extremo para el desarrollo de API, específicamente utilizando el framework Nest.js. Se explica el proceso de inicialización de la API Nest para las pruebas, junto con opciones de personalización como la anulación de los guardias de autenticación. Se destacan los beneficios de las pruebas de extremo a extremo, incluyendo la facilidad de modificación y su función como documentación adicional para la API. También se mencionan los desafíos de escribir la versión inicial de la prueba y un truco para simular la fecha en las pruebas.

1. Introducción a las pruebas de extremo a extremo para API

Short description:

Hola a todos. Mi nombre es Valentin Kononov, y hoy mi charla relámpago trata sobre las pruebas de extremo a extremo para API. Cómo lo hice. Cómo me ahorró nervios y horas y así sucesivamente. Pero primero un poco sobre mí. Soy un desarrollador, que trabaja principalmente con TypeScript y JavaScript en estos días, es decir, con Node.js, y especialmente con el backend. En uno de mis últimos proyectos, teníamos un backend escrito en NestJS, y tuvimos muchos problemas para probarlo, especialmente cuando necesitábamos cambiar alguna funcionalidad. Así que intentamos pasar eventualmente a las pruebas de extremo a extremo, y eso es de lo que trata mi charla.

Mi nombre es Valentin Kononov, y hoy mi charla relámpago trata sobre las pruebas de extremo a extremo para API. Cómo lo hice. Cómo me ahorró nervios y horas y así sucesivamente.

Pero primero un poco sobre mí. Soy un desarrollador, que trabaja principalmente con TypeScript y JavaScript en estos días, es decir, con Node.js, y especialmente con el backend. En uno de mis últimos proyectos, teníamos un backend escrito en NestJS, y tuvimos muchos problemas para probarlo, especialmente cuando necesitábamos cambiar alguna funcionalidad. Así que intentamos pasar eventualmente a las pruebas de extremo a extremo, y eso es de lo que trata mi charla.

En este momento, trabajo en una empresa de Unity, y todo se trata de diversión y juegos y cosas así, pero trabajo en el departamento de publicidad, por lo que tenemos muchos servicios tanto en el frontend como en el backend, y por supuesto, necesitamos probarlos cuidadosamente. Así que vamos al grano, no tenemos mucho tiempo. Cuando hablamos de pruebas de API, ¿a qué nos referimos normalmente? En primer lugar, necesitamos probar el flujo de datos, es decir, cómo fluyen los datos a través de nuestros servicios, cuáles son las consultas a la base de datos, es decir, qué entrada, salida y transformadores de datos tenemos. Y en la mayoría de los casos, solo necesitamos probar si las operaciones CRUD funcionan correctamente y si la sindicación funciona correctamente y si los puntos finales son correctos, y lo que normalmente hacemos para lograr eso. Por supuesto, en la mayoría de los casos, tenemos pruebas de integración.

¿Y cómo funciona eso? Las pruebas de integración suelen probar el módulo completo, como todo el servicio, pero el servicio no es algo que esté presente por sí mismo, es algo que se comunica con otros módulos como una base de datos o un repositorio de datos o algún modelo de sindicación, entre otras cosas. Por eso, para probarlo, necesitamos simular algunas dependencias. Y cuando hicimos eso y la prueba funciona correctamente, ¿qué hacemos a continuación? Actualizamos el código, agregamos nuevas funcionalidades. ¿Y qué necesitamos hacer después? Necesitamos actualizar las dependencias simuladas, para que la prueba siga funcionando. ¿Y qué más? Sí, necesitamos actualizar las dependencias simuladas una y otra vez, y otra vez, y otra vez, y otra vez.

Realmente me enfrenté a eso. Teníamos una prueba realmente grande, importante y súper mega crítica sobre algún proceso de exportación. Y cada vez que cambiábamos algo mínimo en el código de exportación, necesitábamos reescribir completamente toda la prueba. Eso fue malo. Entonces, ¿cómo podría verse normalmente la prueba de integración con todas las simulaciones? En realidad, es una gran cantidad de diferentes tipos de funciones de simulación, como se muestra en las diapositivas. A veces simulamos todo el módulo, a veces simulamos solo una función. Y por supuesto, cuando algo cambia en la función, especialmente en el último ejemplo aquí, la función de actualización cambió, y su salida cambió. Incluso el formato de salida, que era un objeto, se convirtió en un simple número. Así que necesitábamos actualizar la simulación. Y eso realmente fue molesto porque pasamos mucho tiempo solo para mantener las pruebas. Pero debería ser al revés, es decir, las pruebas deberían ahorrar tiempo en el desarrollo. Entonces, ¿hay alguna alternativa de cómo podemos proceder para que todo el proceso sea más fácil para nosotros como desarrolladores? Básicamente, mi receta para eso fueron las pruebas de extremo a extremo.

2. Pruebas de extremo a extremo para API

Short description:

Discutimos el uso del framework Nest.js para pruebas de extremo a extremo en el desarrollo de API. Las pruebas de extremo a extremo implican iniciar toda la API en un entorno de pruebas y probarla punto por punto. La inicialización de la API de Nest implica crear un módulo de pruebas, inicializarlo y crear una aplicación de Nest. Las pruebas se pueden personalizar mediante la anulación de los guardias de autenticación. Las pruebas en sí implican realizar solicitudes POST o GET a puntos finales específicos, enviar datos de solicitud y esperar códigos y propiedades de respuesta específicos. Las pruebas de extremo a extremo tienen ventajas como ser fáciles de corregir, modificar y servir como documentación adicional para la API. Sin embargo, escribir la versión inicial de la prueba puede llevar tiempo, especialmente cuando se requiere preparación de datos. También se comparte un truco para simular la fecha en las pruebas.

Discutimos con el equipo, vale, tenemos el framework Nest.js. Tiene muchas capacidades de pruebas. ¿Por qué no lo usamos para pruebas de extremo a extremo? ¿Y qué es la prueba de extremo a extremo cuando hablamos de la API? Es cuando inicias toda la API, como todo el servicio de nodo en tu entorno de pruebas, y lo pruebas punto por punto.

En esta diapositiva, puedes ver cómo podría ser la inicialización de la API de Nest. Creas un módulo de pruebas, lo inicializas, creas la aplicación de Nest. Al final, debes cerrarlo y, por supuesto, puedes sobrescribir lo que quieras. Por ejemplo, en Nest, usamos los llamados guardias para la autenticación. Aquí, podemos anularlo, inicializarlo y cerrarlo al final cuando todas las pruebas hayan pasado. La simulación del guardia de autenticación es algo bastante simple, que solo escribes una vez y usas en todas partes. Es realmente algo tan simple.

Y así es como se vería toda la prueba. Literalmente, haces una solicitud, haces una solicitud POST o GET a algún punto final específico, para alguna URL específica. Y en este ejemplo, como es POST, puedes enviar detalles de alguien, como qué tipo de proyecto debemos agregar. Y puedes esperar, como aquí en la última línea, puedes esperar algún tipo de código, como que debería devolver 201. Lo que significa creado exitosamente. Y también puedes hacer una solicitud GET y también formar alguna URL, enviar solicitudes, esperar algún código. Y también esperar alguna respuesta. Y verificar que las propiedades de la respuesta sean correctas.

¿Qué quiero decir? Así que los pros y los contras. Los pros, fáciles de corregir, fáciles de modificar y pruebas de todo el flujo de trabajo. Y como puedes ver aquí mismo, toda la prueba es muy legible y también es una fuente adicional de documentación para tu API. Pero, por supuesto, también hay algunos contras y aspectos negativos. Puede llevar tiempo escribir la versión inicial de esta prueba porque en algunos casos necesitas preparar los datos. Por supuesto, cuando solo tienes una API rudimentaria, puedes usar solo solicitudes GET o POST para crear datos y asegurarte de que se creen. Pero en algunos casos, necesitas preparar los datos en una base de datos y esta base de datos mínima debe ejecutarse en algún lugar en un servicio de integración continua. Y solo para ti tenemos un truco realmente especial, muy pequeño. A veces, en mi experiencia, solo una vez. Pero necesitábamos falsificar la fecha. Preparé algunos datos y debo asegurarme de que estos datos se creen con esta fecha actual. Y generalmente lo hacíamos así. Pero en algún código realmente usamos no solo la función now, sino también construct. Y hay una solución un poco más completa de cómo simular la fecha tanto para now como para el constructor. Así que toma una captura de pantalla, es un truco muy útil, nos vemos más tarde.

Y aquí está el enlace a mis diapositivas, mi sitio web y mi documentación, que me inspiraron para todo eso. Entonces, como resumen, haz pruebas. Realmente es algo genial cuando haces pruebas. Y las pruebas de extremo a extremo hacen que los cambios sean más rápidos y puedes cubrir todo el flujo de trabajo con las últimas simulaciones y ser mucho más feliz. ¡Nos vemos, chicos!

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

Enrutamiento en React 18 y más allá
React Summit 2022React Summit 2022
20 min
Enrutamiento en React 18 y más allá
Top Content
Routing in React 18 brings a native app-like user experience and allows applications to transition between different environments. React Router and Next.js have different approaches to routing, with React Router using component-based routing and Next.js using file system-based routing. React server components provide the primitives to address the disadvantages of multipage applications while maintaining the same user experience. Improving navigation and routing in React involves including loading UI, pre-rendering parts of the screen, and using server components for more performant experiences. Next.js and Remix are moving towards a converging solution by combining component-based routing with file system routing.
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.
Pruebas de Aplicaciones Web con Playwright
TestJS Summit 2022TestJS Summit 2022
20 min
Pruebas de Aplicaciones Web con Playwright
Top Content
Testing web applications with Playwright, a reliable end-to-end testing tool. Playwright offers fast execution, powerful tooling, and support for multiple languages. It provides precise selectors, web-first assertions, and code generation for easy testing. Playwright also offers features like live debugging, tracing, and running tests on CI. The future of Playwright aims to make testing easy and fun, with a focus on creating frustration-free web experiences.
Una Guía Práctica para Migrar a Componentes de Servidor
React Advanced 2023React Advanced 2023
28 min
Una Guía Práctica para Migrar a Componentes de Servidor
Top Content
React query version five is live and we'll be discussing the migration process to server components using Next.js and React Query. The process involves planning, preparing, and setting up server components, migrating pages, adding layouts, and moving components to the server. We'll also explore the benefits of server components such as reducing JavaScript shipping, enabling powerful caching, and leveraging the features of the app router. Additionally, we'll cover topics like handling authentication, rendering in server components, and the impact on server load and costs.
Pruebas de ciclo completo con Cypress
TestJS Summit 2022TestJS Summit 2022
27 min
Pruebas de ciclo completo con Cypress
Top Content
Cypress is a powerful tool for end-to-end testing and API testing. It provides instant feedback on test errors and allows tests to be run inside the browser. Cypress enables testing at both the application and network layers, making it easier to reach different edge cases. With features like AppActions and component testing, Cypress allows for comprehensive testing of individual components and the entire application. Join the workshops to learn more about full circle testing with Cypress.

Workshops on related topic

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
AI para Desarrolladores de React
React Advanced 2024React Advanced 2024
142 min
AI para Desarrolladores de React
Featured Workshop
Eve Porcello
Eve Porcello
El conocimiento de las herramientas de AI es fundamental para preparar el futuro de las carreras de los desarrolladores de React, y la suite de herramientas de AI de Vercel es una vía de acceso accesible. En este curso, examinaremos más de cerca el Vercel AI SDK y cómo esto puede ayudar a los desarrolladores de React a construir interfaces de transmisión con JavaScript y Next.js. También incorporaremos APIs de terceros adicionales para construir y desplegar una aplicación de visualización de música.
Temas:- Creación de un Proyecto de React con Next.js- Elección de un LLM- Personalización de Interfaces de Transmisión- Construcción de Rutas- Creación y Generación de Componentes - Uso de Hooks (useChat, useCompletion, useActions, etc)
Cómo empezar con Cypress
TestJS Summit 2022TestJS Summit 2022
146 min
Cómo empezar con Cypress
Featured WorkshopFree
Filip Hric
Filip Hric
La web ha evolucionado. Finalmente, también lo ha hecho el testing. Cypress es una herramienta de testing moderna que responde a las necesidades de testing de las aplicaciones web modernas. Ha ganado mucha popularidad en los últimos años, obteniendo reconocimiento a nivel mundial. Si has estado esperando aprender Cypress, ¡no esperes más! Filip Hric te guiará a través de los primeros pasos sobre cómo empezar a usar Cypress y configurar tu propio proyecto. La buena noticia es que aprender Cypress es increíblemente fácil. Escribirás tu primer test en poco tiempo y luego descubrirás cómo escribir un test de extremo a extremo completo para una aplicación web moderna. Aprenderás conceptos fundamentales como la capacidad de reintentar. Descubre cómo trabajar e interactuar con tu aplicación y aprende cómo combinar pruebas de API y de UI. A lo largo de todo este masterclass, escribiremos código y realizaremos ejercicios prácticos. Saldrás con una experiencia práctica que podrás aplicar a tu propio proyecto.
Construye una aplicación WordPress sin cabeza con Next.js y WPGraphQL
React Summit 2022React Summit 2022
173 min
Construye una aplicación WordPress sin cabeza con Next.js y WPGraphQL
Top Content
WorkshopFree
Kellen Mace
Kellen Mace
En esta masterclass, aprenderás cómo construir una aplicación Next.js que utiliza Apollo Client para obtener datos de un backend de WordPress sin cabeza y usarlo para renderizar las páginas de tu aplicación. Aprenderás cuándo debes considerar una arquitectura de WordPress sin cabeza, cómo convertir un backend de WordPress en un servidor GraphQL, cómo componer consultas usando el IDE GraphiQL, cómo colocar fragmentos GraphQL con tus componentes, y más.
Next.js 13: Estrategias de Obtención de Datos
React Day Berlin 2022React Day Berlin 2022
53 min
Next.js 13: Estrategias de Obtención de Datos
Top Content
WorkshopFree
Alice De Mauro
Alice De Mauro
- Introducción- Prerrequisitos para la masterclass- Estrategias de obtención: fundamentos- Estrategias de obtención – práctica: API de obtención, caché (estática VS dinámica), revalidar, suspense (obtención de datos en paralelo)- Prueba tu construcción y sírvela en Vercel- Futuro: Componentes de servidor VS Componentes de cliente- Huevo de pascua de la masterclass (no relacionado con el tema, destacando la accesibilidad)- Conclusión
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
WorkshopFree
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