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

Arquitectura Clean para APIs en Node.js
10:06 min - 4

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

Prueba end-to-end con Supertest en Node
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
16:25 min - 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

Base de datos aislada para pruebas con Docker
17:56 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 endpoints protegidos por rol
Viendo ahora - 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 endpoints protegidos por rol
Resumen
Cuando un endpoint exige autenticación y un rol específico, las pruebas end to end deben validar tres escenarios: petición sin token, petición con token de rol incorrecto y petición con token del rol autorizado. Aquí verás cómo estructurar esas pruebas usando seeders, JWT y comparación contra la base de datos para el endpoint de crear categorías.
¿Cómo pruebo un endpoint protegido sin enviar access token?
El primer caso siempre es el más simple: confirmar que la API rechaza peticiones anónimas. La ruta POST /categories está protegida, así que enviar un body sin cabecera de autorización debe responder con un 401 Unauthorized.
El test se arma con supertest, declarando el endpoint, el método y el input data con name e image. Para datos de prueba puedes escribirlos a mano o apoyarte en una librería como Faker.js que genera información demo realista [02:10].
¿Qué retorna un endpoint protegido si no envío token? Devuelve un código HTTP 401, porque el middleware de autenticación corta la petición antes de llegar al controlador.
¿Cómo autentico un usuario admin antes de las pruebas?
La estrategia es loguearte una sola vez y reutilizar el token. Dentro del describe declaras una variable accessToken en el scope del bloque y la asignas dentro de un beforeAll asíncrono que hace login con un usuario conocido del seed [04:30].
Ese token viaja en cada petición mediante .set('Authorization', 'Bearer ' + accessToken). Después del login, el flujo de creación queda así:
- Enviar
POST /categoriescon el token en la cabecera. - Esperar un status 201 como respuesta.
- Buscar la categoría recién creada con
models.Category.findByPk(body.id). - Comparar
nameeimagecontra el input data enviado.
No olvides limpiar la variable en el afterAll para que no contamine pruebas posteriores. Es un detalle pequeño que evita falsos positivos cuando los archivos de test crecen.
¿Por qué comparar la respuesta contra la base de datos?
Validar solo el status code no garantiza que el registro exista. Al consultar el modelo con la primary key devuelta, confirmas que la persistencia ocurrió y que los campos guardados coinciden con los enviados. Es la diferencia entre probar la API y probar el sistema completo.
¿Cómo simulo un usuario con rol customer en los seeders?
Para probar el rechazo por rol insuficiente necesitas un segundo usuario en el seed. En el archivo de Sequelize agregas un registro adicional con email: customer@mail.com, role: customer y un hash generado a partir de customer123 [08:15].
Un truco para mantener el código lineal: resuelve el bcrypt.hash en la misma línea de la propiedad usando await, así evitas declarar variables intermedias para el admin y el customer. El admin queda con password admin123 y el customer con customer123.
Como la primary key es autoincremental, sabes que el admin tiene id: 1 y el customer id: 2. Ese orden te permite escribir los logins de cada bloque sin ambigüedad.
¿Qué pasa si envío un JWT válido pero del rol equivocado? El servidor responde 401 igual que sin token. El JWT se decodifica correctamente, pero el guard de roles bloquea el acceso porque el usuario no tiene permiso administrador.
¿Cómo estructuro el bloque de pruebas para el rol customer?
Duplicas el describe de categorías y lo renombras para indicar que las pruebas corren con un customer user. El beforeAll ahora hace login con customer@mail.com y password customer123, guardando ese token en la variable local del bloque.
Los casos a cubrir son dos:
- Sin token: debe retornar 401, igual que en el bloque admin.
- Con token de customer: también debe retornar 401, porque la ruta exige rol administrador.
Este segundo caso es el más valioso. Confirma que tu middleware de autorización no se queda solo en validar la firma del JWT, sino que además revisa el claim de rol antes de ejecutar el controlador.
¿Dónde se define que solo admin puede crear categorías?
En el archivo de rutas de categorías, el POST está envuelto por un middleware que lista los roles permitidos. Si el array contiene solo admin, cualquier otro rol cae en el manejador de error y la respuesta sale como 401 [10:05]. Esa configuración es la que tu prueba está validando indirectamente.
¿Cómo corro las pruebas y qué debería ver?
Desde la terminal ejecutas npm run test:e2e. La salida agrupa los resultados por describe, mostrando primero las pruebas de categorías con admin y luego con customer. Ambos bloques deben pasar: el admin crea exitosamente y el customer recibe 401 en sus dos escenarios.
Este patrón, seed compartido más login en beforeAll por bloque, te deja un flujo dinámico donde agregar un nuevo rol o un nuevo caso solo requiere extender el seeder y duplicar el describe. ¿Cómo organizarías tú las pruebas si tu API tuviera cinco roles distintos? Cuéntame en los comentarios.