"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.