Entonces, una prueba para una aplicación de página única escrita con Playwright podría verse como lo que puedes ver aquí. Tienes esta función auxiliar de ruta de página proporcionada por Playwright, que podemos usar para interceptar todas las solicitudes que se realizan desde el navegador a un microservicio, por ejemplo. Entonces, si se realiza una solicitud a slash API slash items, le decimos que la solicitud no debe pasar al microservicio real. En su lugar, devolvemos directamente, por ejemplo, un único elemento de la lista de compras.
OK, eso fue para las aplicaciones monolíticas y de página única. Pero ahora, ¿qué pasa con una architecture que, como te mostré antes, tiene una parte del lado del cliente y también una parte del lado del servidor dentro de una sola aplicación, como es el caso de, por ejemplo, Next.js o Next.js, o también cuando tienes tu propia aplicación de página única con un back-end personalizado para el front-end, por ejemplo, y microservicios. Esto es importante aquí. Como vimos con la aplicación monolítica y también con las aplicaciones de página única sin una parte del lado del servidor, podemos utilizar diferentes técnicas. Pero en este caso especial, donde tenemos una parte del lado del servidor dentro de nuestra aplicación de front-end y microservicios, y obtenemos nuestros datos de los microservicios, necesitamos o nos enfrentamos a un problema.
Una architecture podría verse así, donde tienes tu aplicación Next.js con tus componentes del lado del cliente, como tus elementos de vista, y también una parte del lado del servidor, que típicamente son tus rutas de API en una aplicación Next.js. Y tu código del lado del cliente obtiene datos del lado del servidor, de las rutas de API en el ejemplo de Next.js. Y esta parte del lado del servidor obtiene sus datos de los microservicios. Entonces, como dije, aquí nos enfrentamos a un problema porque tenemos dos tipos de solicitudes. Tenemos solicitudes del navegador al servidor, que podemos ver aquí desde la parte del lado del cliente hasta la parte del lado del servidor. Pero también tenemos solicitudes de servidor a servidor desde nuestras rutas de API a uno o varios microservicios. Y al escribir pruebas, solo podemos simular esas solicitudes, pero no podemos simular esas solicitudes aquí desde el lado del servidor a los servicios. Lo que podríamos hacer, una solución alternativa que podríamos elegir usar, es escribir pruebas para las piezas separadas.
No tenemos una prueba para toda nuestra aplicación Next.js o para una función de toda nuestra aplicación Next.js, pero tenemos pruebas separadas para la parte del lado del cliente y otra prueba para la parte del lado del servidor o la pieza del lado del servidor de la aplicación. Y esta es una decisión válida que podemos tomar. Podemos optar por escribir pruebas para las diferentes piezas, pero hay un problema con esto. Porque cuando seguimos este camino, también debemos asegurarnos de que también probamos la combinación de estas dos partes para probar el cruce de fronteras entre el lado del cliente y el lado del servidor. Porque si no hacemos esto, aunque podríamos tener una cobertura de prueba perfecta porque tenemos pruebas para el código del lado del cliente y pruebas separadas para el código del lado del servidor, no podemos estar seguros de que esas dos piezas funcionen juntas correctamente si no tenemos una prueba que se encuentre entre el lado del cliente y el lado del servidor.
Y podemos tener una prueba así. Por ejemplo, pruebas de contrato, pruebas de integración, hay diferentes formas en las que podemos lograr esto. Y las pruebas de contrato, como también se menciona en el título de esta charla, son una buena manera de hacerlo. Y de hecho, para esta frontera aquí, recomiendo encarecidamente utilizar pruebas de contrato. Entonces, para la frontera entre nuestra aplicación y los microservicios, no queremos tener una sola prueba que pruebe, o tal vez solo unas pocas, pruebas reales de extremo a extremo. Pero la gran mayoría de las funciones, no queremos probarlas de manera que probemos todo el sistema, incluidos todos los microservicios. Pero queremos tener pruebas separadas para nuestra aplicación NUXT y para nuestros servicios. Y aquí, podemos utilizar pruebas de contrato para asegurarnos de que esas dos piezas también funcionen juntas y no solo de forma aislada.
Comments