Pruebas de Autenticación en Login con JavaScript
Clase 11 de 25 • Curso de End to End Testing para APIs REST con Node.js
Resumen
¿Cómo funcionan las pruebas de login en tu aplicación?
Imagínate que estás optimizando la seguridad de una aplicación, y una de las primeras pruebas que necesitas hacer es comprobar la funcionalidad del login. Vamos a analizar cómo abordar estas pruebas utilizando herramientas como Insomnia o Postman, y verificaremos distintos escenarios que podrían presentarse, como el uso de credenciales inválidas o válidas.
¿Qué sucede cuando se introducen credenciales incorrectas?
Cuando pruebas el endpoint de login con un email o un password incorrecto, el servidor debería responder con un código 401, lo que indica que no estás autorizado. Aquí es vital asegurarse de que las pruebas reflejan correctamente este comportamiento.
// Prueba con credenciales incorrectas
const email = "emailfake@gmail.com";
const password = "incorrectpassword";
// Esperamos un código de estado 401
assert.equal(response.statusCode, 401);
¿Cómo gestionar los hooks en las pruebas?
Al crear pruebas, normalmente se usan hooks como before-each
y after-each
para inicializar y limpiar un entorno de pruebas por cada test. Sin embargo, se puede optimizar utilizando before-all
y after-all
, que configuran y desmontan toda la aplicación una vez por archivo, no por prueba, mejorando la eficiencia.
// Cambiamos beforeEach a beforeAll
beforeAll(async () => {
server = await startTestServer();
});
// Cambiamos afterEach a afterAll
afterAll(() => {
server.close();
});
¿Cómo pruebas un login exitoso?
Cuando usas credenciales corre cuentas en la base de datos, un login exitoso debería devolver un código 200, un objeto JSON con la información del usuario y un access token. Este token será necesario para hacer solicitudes futuras a endpoints protegidos.
// Prueba con credenciales correctas
const email = "usuario@existente.com";
const password = "passwordcorrecto";
assert.equal(response.statusCode, 200);
assert.exists(response.body.accessToken);
assert.equal(response.body.user.email, email);
¿Cómo verificas que un token de acceso existe?
Ya que el access token es esencial para la autenticación de futuras solicitudes, debes confirmar su existencia en la respuesta del login.
// Verificamos que el token de acceso existe
assert.isTrue(response.body.hasOwnProperty('accessToken'));
¿Cómo gestionamos las respuestas del servidor?
Durante las pruebas end-to-end, es importante evitar el registro excesivo que puede ensuciar la salida. Para hacerlo, solo debemos registrar mensajes específicos en el ambiente de desarrollo.
// Configuración para el logger en ambiente de desarrollo
if (config.env === 'dev') {
console.log(allLogs);
} else {
disableLogger();
}
¿Cómo asegurarse que no se retorne información sensible?
Es crucial que datos sensibles como los passwords no sean parte de las respuestas del servidor, incluso si están encriptados.
// Verificamos que los passwords no se retornen
assert.equal(response.body.user.password, undefined);
Estas pruebas son puntos de revisión fundamentales que no solo protegen la integridad de tu aplicación sino que también aseguran una experiencia de usuario segura y confiable. A medida que desarrolles tus habilidades, seguirá creciendo tu capacidad para crear aplicaciones más seguras y robustas. Continúa explorando y dominando el mundo del testing para mejorar tus aplicaciones.