Pruebas de Rutas Protegidas con API Key en Node.js

Clase 12 de 25Curso de End to End Testing para APIs REST con Node.js

Resumen

¿Cómo utilizar API keys para pruebas protegidas?

Las pruebas de endpoints con restricciones son comunes al desarrollar APIs. En los casos donde se requiere más que un simple login, es esencial entender cómo enviar API keys en las cabeceras (headers) para obtener autorización. Este artículo explica el proceso para ejecutar dichas pruebas usando herramientas como Insomnia o Postman, y cómo integrarlas en tu flujo de pruebas automatizadas.

¿Qué pasos seguir para realizar solicitudes de prueba?

En primeras instancias, al enviar solicitudes de prueba a un endpoint protegido por un middleware, es común encontrarse con el mensaje de "no autorizado", debido a la falta de un API key adjunto en los headers. Para rectificar esto:

  1. Verificar la necesidad de la API Key: Asegúrate de que la ruta que estás probando exige una API Key. Esto suele estar especificado en el middleware, que controla el acceso a la ruta.

  2. Consultar las variables de entorno: Si la API key se almacena como una variable de entorno, localízala en el archivo de configuración (generalmente .env).

  3. Configurar la solicitud con la API Key: Utiliza herramientas como Insomnia o Postman para enviar la API Key en los headers de la solicitud. Asegúrate de que el valor sea exacto.

Por ejemplo, configurar una API Key desde Insomnia puede lograrse accediendo a los headers y añadiendo el campo API junto al valor correspondiente.

¿Cómo implementar pruebas automatizadas efectivamente?

Una vez dominado el envío manual de API Keys, es momento de automatizar el proceso dentro del código. Aquí hay un ejemplo de cómo hacerlo en un archivo JavaScript de pruebas:

const request = require('supertest');
const app = require('../app'); // Asegúrate de apuntar al archivo correcto
const config = require('../config');

describe('Pruebas para nueva ruta', () => {
  it('debería retornar 401 sin API key', async () => {
    const response = await request(app).get('/nueva-ruta');
    expect(response.statusCode).toBe(401);
  });

  it('debería retornar 401 con API key inválida', async () => {
    const response = await request(app)
      .get('/nueva-ruta')
      .set('API', 'invalid-api-key');
    expect(response.statusCode).toBe(401);
  });

  it('debería retornar 200 con API key válida', async () => {
    const response = await request(app)
      .get('/nueva-ruta')
      .set('API', config.apiKey);
    expect(response.statusCode).toBe(200);
  });
});

¿Qué hemos aprendido sobre la autenticación de API Keys?

Esta lección ha mostrado cómo realizar pruebas a rutas protegidas ajustando los headers para incluir API Keys. Esto no sólo facilita las pruebas manuales, sino que además mejora la automatización de las pruebas a través de herramientas como supertest. Al comprender cómo emplear API Keys adecuadamente, estás en el camino hacia la construcción de APIs seguras y confiables.

Recuerda siempre mantener organizadas tus variables de entorno y automatizar tus pruebas. Estas prácticas asegurarán una mejor gestión de tus proyectos y te prepararán mejor para las futuras lecciones sobre la validación de autenticaciones más avanzadas, como las basadas en JWT. ¡Sigue adelante con tu aprendizaje y sigue explorando las maravillas del desarrollo de APIs robustas y seguras!