Pruebas de Integridad de Datos con DTOs y Joy en APIs REST
Clase 9 de 25 • Curso de End to End Testing para APIs REST con Node.js
Resumen
¿Cómo se prueba la integridad de la información en una API?
El aseguramiento de la integridad de la información es clave para el correcto funcionamiento de las aplicaciones. En el contexto de desarrollo de APIs, la validación mediante esquemas, como los DTOs (Objetos de Transferencia de Datos), asegura que los datos se envíen y procesen adecuadamente, minimizando riesgos y errores. Exploraremos cómo puedes implementar y probar esta integridad mediante pruebas end-to-end.
¿Qué es un DTO y cómo se valida la información?
Primero, entendamos que un DTO es un modelo que define la estructura y tipo de datos que la API puede recibir. Estos esquemas aseguran que, por ejemplo, un email siga su formato convencional o que una contraseña tenga la longitud mínima requerida.
- Email: Debe tener un formato de correo válido. Si no cumple, la API debe responder con un código de estado 400 (solicitud incorrecta).
- Password: La longitud mínima puede ser, por ejemplo, ocho caracteres. Las contraseñas incorrectas también deben generar un error de código 400.
¿Cómo configuramos las pruebas end-to-end?
Las pruebas end-to-end nos permiten verificar la funcionalidad completa de un endpoint desde el cliente hasta el servidor y viceversa. Vamos a dividir el proceso en pasos lógicos:
-
Configura el ambiente:
- Asegúrate de que la aplicación se esté ejecutando correctamente en un entorno de desarrollo (por ejemplo, el puerto 3000).
-
Crea el archivo de pruebas:
- Dentro de la carpeta end-to-end, crea un archivo llamado
users.end-to-end.js
. Este contendrá todas las pruebas relacionadas al path de usuarios, como crear, actualizar o eliminar usuarios.
- Dentro de la carpeta end-to-end, crea un archivo llamado
-
Escribe las pruebas:
- Las pruebas se organizan en suites utilizando
describe
y dentro de ellas se definen las pruebas individuales contest
.
- Las pruebas se organizan en suites utilizando
test('Debería retornar un 400 bad request', async () => {
const inputData = {
email: 'nicolas.mail.com', // email correcto
password: 'abc' // password incorrecto
};
const response = await api.post('/api/v1/users').send(inputData);
expect(response.statusCode).toBe(400);
});
¿Qué implica el 'mantra de las tres A' en la prueba?
Este método organiza el flujo de prueba en tres fases:
- Arrange: Configura los datos de entrada necesarios para la prueba.
- Act: Ejecuta la acción que producirá un resultado.
- Assert: Verifica si el resultado es el esperado.
Ejemplo en el contexto del post de un usuario:
- Arrange: Prepara un email correcto pero un password invalid.
- Act: Envía los datos a través de un POST a
/api/v1/users
. - Assert: Verifica que la respuesta sea 400, indicativo de una solicitud malformada.
¿Cómo manejar errores y logs en las pruebas?
Durante las pruebas, pueden surgir logs no deseados que ensucian la salida, dificultando el análisis. Para mejorar esto, puedes:
- Comentar temporalmente los logs detallados en los controladores de error.
- Utilizar herramientas como Sentry o Datadog para el registro eficiente de errores.
Implementando estas prácticas, no solo mejoras la calidad de tus aplicaciones, sino que también fomentas un desarrollo más robusto. Te animo a continuar practicando y explorando el apasionante mundo del testing, que es vital para cualquier ecosistema de software profesional.