Pruebas de Autenticación en Login con JavaScript
Clase 11 de 25 • Curso de End to End Testing para APIs REST con Node.js
Contenido del curso
Introducción: pruebas e2e con Node.js
- 2

Exploración y Configuración de APIs con Insomnia y Postman
10:37 min - 3

Pruebas en Node.js con Jest y Clean Architecture
10:06 min - 4

Configuración y uso de Jest para pruebas end-to-end en JavaScript
08:04 min - 5

Pruebas End-to-End con Supertest y Node.js
13:47 min - 6

Buenas prácticas en pruebas con Jest y manejo de ciclos abiertos
08:30 min
Pruebas a la API de Fake Store
- 7

Configuración de Entorno de Pruebas para Aplicaciones Node.js con Twen.js
11:25 min - 8

Generación de Reporte de Cobertura con Pruebas End to End
07:32 min - 9

Pruebas de Integridad de Datos con DTOs y Joy en APIs REST
20:16 min - 10

Pruebas End-to-End con Base de Datos en API REST
17:21 min - 11

Pruebas de Autenticación en Login con JavaScript
Viendo ahora - 12

Pruebas de Rutas Protegidas con API Key en Node.js
07:03 min - 13

Pruebas End-to-End con Access Token en API REST
14:16 min - 14

Pruebas Efectivas de Creación de Usuarios en POS con Bases de Datos
09:03 min
Pruebas en Entornos de Desarrollo Avanzados
- 15

Pruebas End-to-End: Gestión de Datos con Semillas Automatizadas
10:26 min - 16

Configuración de Bases de Datos para Pruebas End-to-End con Docker
17:57 min - 17

Creación de Sets de Datos Manuales para Pruebas End-to-End
15:49 min - 18

Sets de Datos en SQLite: Creación y Gestión Efectiva
14:58 min - 19

Uso de Unsook para Migraciones Programáticas en Pruebas
10:53 min - 20

Pruebas de API: Creación de Categorías con Roles y Tokens
10:28 min - 21

Pruebas End-to-End para API de Productos sin Autenticación
06:01 min - 22

Pruebas de Paginación en Endpoints de Productos con Limit y Offset
04:38 min
Mocking y automatización
Próximos pasos
¿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.