"Nunca hay pruebas suficientes que demuestren que un software está bien, pero un único test puede mostrar que está mal"

-- ✍️ Amir Ghahrai

Hemos visto que Puppeteer es un automatizador de Chrome. Los navegadores solemos usarlo para ver páginas web pero también podemos, y como programadores debemos, usarlos para inspeccionar las comunicaciones de datos json. Con esto vas a poder probar tu API.

Supertest

Para facilitar dichas inspecciones usaremos una librería con un nombre pretencioso: supertest. En esencia nos permite hacer peticiones http.

Veamos la llamada get más sencilla posible. el hello world de las API.

async function getHello() {
  const inputHostUrl = `https://api-base.herokuapp.com`;
  await given(`the API url ${inputHostUrl}`, async () => {
    const inputEndPoint = `/api/pub/hello`;
    await when(`we call the ${inputEndPoint} endPoint`, async () => {
      const response = await request(inputHostUrl).get(inputEndPoint);
      const actual = response.body.message;
      const expected = `Hola Mundo`;
      then(`respond with the Hola Mundo message`, actual, expected);
    });
  });
}

CRUD

Algo más elaborado sería probar la comunicación completa. Dejo la muestra de cómo enviar una payload con el método post

async function postProject() {
  const inputHostUrl = `https://api-base.herokuapp.com`;
  await given(`the API url ${inputHostUrl}`, async () => {
    const inputEndPoint = `/api/pub/projects`;
    await when(`we post to the ${inputEndPoint} endPoint`, async () => {
      const inputProject = { name: 'start testing', dueDate: '2020-12-31' };
      const response = await request(inputHostUrl).post(inputEndPoint).send(inputProject);
      const actual = response.body.name;
      const expected = 'start testing';
      then(`respond with the same object`, actual, expected);
      const expectedStatus = 201;
      then(`respond with status code 201`, response.status, expectedStatus);
    });
  });
}

Como ves, se pueden comprobar respuestas, códigos, cabeceras... Es decir, se trata de automatizar las llamadas al API y comprobar que las respuestas entran dentro de lo esperado. Todo ello sin frameworks especiales de pruebas, sólo JavaScript con alguna librería de ayuda.