Pruebas End-to-End para API de Productos sin Autenticación

Clase 21 de 25Curso de End to End Testing para APIs REST con Node.js

Resumen

¿Cómo escribir pruebas para el endpoint de productos?

En el fascinante mundo del desarrollo de software, escribir pruebas efectivas es crucial para garantizar la calidad de nuestras aplicaciones. En este contexto, nos enfocaremos en la creación de pruebas para el endpoint que retorna todos los productos de una tienda en línea. Estas pruebas asegurarán que la aplicación funcione correctamente, incluso después de realizar cambios en el código.

¿Cómo iniciar con las pruebas de productos?

Primero, creamos un archivo nuevo de pruebas llamado products.end2end.js. A diferencia de los endpoints protegidos que requieren un access token, este endpoint es de acceso libre, facilitando su prueba. Partimos de un set de datos que contiene cuatro productos. Nuestro objetivo será confirmar que el endpoint retorna exactamente esos cuatro artículos.

Código de prueba inicial

// products.end2end.js

// Realizamos una petición a nuestro endpoint de productos
const response = await api.get('/api/v1/products');

// Verificamos el código de estado HTTP
expect(response.status).toBe(200);

// Comprobamos que el tamaño del conjunto de productos coincida con el de la base de datos
const productsInDb = await models.Product.find();
expect(response.body.length).toBe(productsInDb.length);

Ejecutamos la prueba desde la terminal con el comando npm run end2end y verificamos que se ejecute exitosamente, asegurando la correspondencia entre los productos retornados y los almacenados.

¿Cómo verificar la categoría anidada en los productos?

Algunas aplicaciones requieren que cada producto incluya información anidada, como una categoría. Esto es crucial para mantener la integridad y funcionalidad del frontend, especialmente durante el mantenimiento de la API.

Verificación de anidación de categoría

Añadimos una prueba para garantizar que cada producto incluya su categoría:

// Accedemos al primer producto del array retornado
const product = response.body[0];

// Verificamos la existencia del objeto 'category'
expect(product).toHaveProperty('category');

Si por alguna razón, el código que anida la categoría es eliminado o comentado, esta prueba fallará advertiéndonos del error. Esto es especialmente útil para evitar despliegues defectuosos que impacten negativamente en el frontend.

Importancia de estas pruebas

Implementar estas pruebas garantiza que nuestra API maneje correctamente la información, previniendo problemas futuros en la interacción con el frontend. Esta práctica de testing no solo detecta errores potenciales, sino que también es una herramienta invaluable durante el mantenimiento del código, asegurando la robustez y confiabilidad de nuestras aplicaciones.

A medida que profundices más en el temario, te animamos a seguir explorando y practicando con entusiasmo. Recordando siempre: ¡cada prueba es un paso más hacia la excelencia en el desarrollo de software!