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
Pruebas de Autenticación en Login con JavaScript
Resumen
Validar que un endpoint de autenticación responda correctamente ante credenciales válidas e inválidas es una de las pruebas más importantes en cualquier API. Aquí se aborda paso a paso cómo construir pruebas end-to-end al endpoint de login, optimizar los hooks de testing y limpiar los logs innecesarios de la terminal para obtener un output claro y profesional.
¿Cómo optimizar los hooks de before each a before all?
Antes de escribir nuevas pruebas, conviene hacer una optimización clave en la configuración del entorno de testing. Los hooks before each y after each ejecutan código antes y después de cada test individual [01:30]. Esto significa que se levanta una nueva instancia de la aplicación por cada prueba, lo cual es innecesario.
Al cambiar a before all y after all, la aplicación se crea una sola vez por bloque describe, es decir, por archivo [02:05]. Todos los tests dentro de ese bloque comparten la misma instancia del servidor. Esto reduce el tiempo de ejecución y el consumo de recursos sin afectar los resultados.
- Se crea una sola aplicación por archivo de pruebas.
- Se comparte esa instancia entre todos los tests del
describe. - Los resultados siguen funcionando de manera normal tras el cambio.
¿Cómo probar un 401 unauthorized en el login?
El primer caso de prueba consiste en enviar credenciales inválidas y verificar que el servidor responda con un status code 401, que significa unauthorized [03:40]. Se crea un archivo nuevo llamado auth.e2e.test.js para separar las pruebas de autenticación de las pruebas de usuarios.
El test envía un email falso como emailfake@gmail.com y un password inventado mediante una petición POST a la ruta /auth/login [04:10]. Como ese usuario no existe en la base de datos, el servidor debe contestar con un 401. Esta prueba valida el comportamiento esperado cuando alguien intenta acceder con datos incorrectos.
¿Cómo validar un login exitoso con status 200?
El segundo caso prueba el flujo correcto: enviar un usuario que sí existe en la base de datos y verificar que la respuesta sea un status code 200 [05:15]. Además del código de respuesta, se validan dos cosas importantes:
- Que exista un campo access token en la respuesta, usando
toBeTruthy()[06:00]. No se puede comparar contra un valor específico porque el token se genera dinámicamente y solo el servidor puede verificar su validez. - Que el email del usuario devuelto coincida con el email enviado en la petición.
¿Cómo consultar la base de datos dentro de las pruebas?
Para hacer la validación más robusta, se puede traer información directamente desde los models de la base de datos [07:10]. Por ejemplo, usar models.User.findByPk(1) para obtener un usuario específico y comparar su email con el que devuelve el endpoint. Es importante usar el nombre correcto del modelo tal como se definió en el archivo de configuración; un error de typo como escribir users en lugar de User genera un fallo al intentar leer la propiedad findByPk [09:00].
El password almacenado en la base de datos tiene hash, por lo que no se puede extraer para enviarlo como credencial. Esto implica que el password de prueba debe conocerse de antemano.
¿Cómo verificar que el password no se retorne en la respuesta?
Una buena práctica de seguridad es nunca devolver el password en la respuesta, ni siquiera encriptado [10:45]. Para probarlo, se agrega una aserción que valide que el campo password dentro del objeto user sea undefined.
Si alguien elimina accidentalmente la línea de código que borra el password del objeto de respuesta en el servicio de autenticación, la prueba falla inmediatamente [11:30]. Esto funciona como una red de seguridad que alerta sobre cambios peligrosos en el código.
Para limpiar la terminal de logs innecesarios generados por Sequelize y Express, se condiciona el logger para que solo imprima en consola cuando la variable de entorno NODE_ENV sea igual a dev [08:15]. Así, durante las pruebas, el output muestra únicamente los resultados de los tests.
- Condición
config.env === 'dev'para activar logs de base de datos. - Mismo criterio para el middleware de manejo de errores de Express.
- Terminal limpia con solo información relevante de las pruebas.
¿Has implementado pruebas que validen que información sensible no se filtre en las respuestas de tu API? Comparte tu experiencia y las estrategias que utilizas para proteger datos críticos en tus endpoints.