En un post anterior había explicado como hacer pruebas unitarias en javascript usando la librería mochajs. Ahora el siguiente paso es que hablemos también de como crear pruebas de integración para nuestros proyectos.
Para efectos de lograrlo voy a utilizar 2 librerías:
Esta ultima es una librería para simular (mock) llamadas http y sus respuestas en lugar de hacer una llamada funcional. Funciona algo así como decirle a nuestra aplicación: “Cuando observes una llamada http con estas características no la hagas de verdad, mas bien simula que la haces y responde esto”
Y es que las pruebas de integración son eso, establecer un contrato entre un servicio con el que nos vamos a integrar y nuestra aplicación. De este modo si cambia el contrato las pruebas fallan y se tiene que cambiar este contrato.
Veamos un ejemplo
var nock = require('nock'); var query = { q: '(nodejs)' }; nock('https://ejemplolandia.com') .get('/prueba') .query(query) .reply(200, 'exito')
Aquí, le decimos a nock que sobrescriba todas las llamadas a ejemplolandia.com con el URI /prueba que tengan un query-string como el que se describe, y que automáticamente responda: 200 – exito.
entonces la siguiente llamada a ese endpoint se realizara a través de nock y devolverá el resultado esperado.
request({ url: 'https://ejemplolandia.com/prueba', qs: query, method: 'GET' }, function(error, response, body) { assert(body === 'exito'); assert(response.statusCode === 200); });
Como previamente habíamos configurado nock para que devolviera esa respuesta, ahora los asserts funcionan y la prueba pasa.
Entonces para hacer la prueba completa y formal introducimos mocha a la mezcla, y nuestra prueba de integración final se vería así:
const nock = require('nock'); const mocha = require('nock'); var assert = require('assert'); describe('llamadas a ejemplolandia.com/prueba', function() { it('devuelve 200 exito', function() { var query = { q: '(nodejs)' }; nock('https://ejemplolandia.com') .get('/prueba') .query(query) .reply(200, 'exito'); request({ url: 'https://ejemplolandia.com/prueba', qs: query, method: 'GET' }, function(error, response, body) { assert(body === 'exito'); assert(response.statusCode === 200); }); }); });
Nock es muy completo a la hora de hacer este tipo de pruebas y tiene muchas opciones que deben ser exploradas a fondo, y no alcanza solo un post para hacerlo. Yo recomiendo que lean toda la documentación para poder comprender a fondo todas sus capacidades y hacer pruebas de integración de buena calidad.