Pruebas unitarias con Jest (Parte 1).

Jest es un framework escrito por facebook y diseñado para escribir pruebas unitarias de manera sencilla en proyectos de javascript.

Pero ¿qué son las pruebas unitarias?

En palabras simples se trata de escribir programas que nos permita probar que algún elemento de código funcione de la forma esperada.

Veamos un ejemplo muy simple sin usar algún framework:

Supongamos que escribimos una función que suma 2 números.

function suma(n1, n2) {

  return n1 + n2;

}

const resultado = suma(1, 2);

console.log(`El resultado de la suma es ${resultado}`);

Sencillo el resultado es 3, como podría esperarse.

Por lo tanto ahora podemos escribir un programa que cada vez que se ejecute confirme ese resultado:

console.log('probando que el resultado de suma(1,2) sea 3');

const resultado = suma(1, 2);

if (resultado !== 3 ) throw new Error(`La prueba ha fallado`);

console.log('La prueba ha sido exitosa')

Nota. Este es sólamente un ejemplo muy rudimentario, en la práctica nadie escribe pruebas de este modo.

¿Cuál es el objetivo de escribir pruebas unitarias?

Seguro te ha pasado que empiezas a escribir una aplicación y al principio sabes perfectamente cómo están organizados todos sus elementos, sin embargo, al ir creciendo, se vuelve muy complicado tener el panorama completo.

Resulta que meses después te piden un cambio, el cual realizas sin problemas, pero de pronto, ¡bam! algo falla en un escenario que ya habías probado.

Este es uno de los tantos beneficios de escribir pruebas; nos ayudan detectar este tipo de errores rápidamente, además de mejorar la calidad de nuestro código, y por lo tanto a reducir costos.

Ahora sí, JEST.

Cómo mencionaba anteriormente Jest es un framework para javascript, el cuál incluye un montón de herramientas para facilitarnos la escritura de este tipo de pruebas, como por ejemplo; mocks que nos permiten simular el comportamiento de otros elementos de nuestro proyecto, la función expect para hacer diferentes tipos de comparaciones, entre otros.

Creando y configurando un proyecto de prueba.

Vamos a crear un proyecto básico, para eso generamos un directorio:

mkdir jestproject 

Nos movemos al directorio que creamos e inicializamos nuestro proyecto:

cd jestproject

npm init -y

Esto nos generó nuestro archivo package.json en el directorio, ahora vamos a instalar jest como dependencia de dev:

npm install jest --save-dev

Ahora vamos a crear un archivo llamado suma.js que contendrá la función que deseamos probar:

const suma = (n1, n2) => {

  return n1 + n2;

}

module.exports = suma;

En seguida creamos un archivo llamado app.js para poner nuestro código principal:

const suma = require('./suma');

const result = suma(1, 2);
console.log(`El resultado es: ${result}`);

Editamos el archivo package.json agregando "serve": "node app.js" en la sección de scripts, quedando de la siguiente manera:

"scripts": {
  "serve": "node app.js",
  "test": "echo \"Error: no test specified\" && exit 1"
},

Probamos nuestra aplicación:

npm run serve.js

Obtendremos el siguiente resultado:

resultado npm run serve

Configurando JEST.

Ahora vamos a preparar jest para poder empezar a escribir nuestras pruebas unitarias, para ello volvemos a editar el archivo package.json y reemplazamos el valor de test en la sección de scripts:

"scripts": {
  "serve": "node app.js",
  "test": "jest"
},

Creamos un directorio llamado __test__ en la raíz de nuestro proyecto y dentro un archivo llamado app.test.js en el cuál escribiremos nuestra primera prueba:

const suma = require('../suma');


test('Probar que la suma de 1 + 2 sea igual a 3', () => {

  const expected = 3;

  const resultado = suma(1, 2);

  expect(resultado).toBe(expected);  

});

Nota. Es importante que el archivo tenga la extensión .test.js ya que jest por defecto se encarga de buscar estos archivos.

Como podrás notar nuestro caso de prueba se genera usando la función test, la cual recibe 2 parámetros: el primero es la descripción de la prueba, y el segundo es una arrow function con el código de la prueba.

Otro punto a notar es el uso de la función expect, la cual contiene un conjunto de "matchers" que nos permiten comparar que ciertas condiciones se cumplan.

En este caso estamos usando toBe, para asegurarnos que el resultado de la llamada a la función que estamos probando (suma) sea igual al valor esperado (expected).

Ahora podemos ejecutar nuestra prueba, escribimos en la terminal:

npm run test

Si todo ha ido bien, obtendrás algo parecido a lo siguiente:

Resultado npm run test

Quiere decir, que encontró nuestra prueba, la ejecutó y que fue correcta.

Por último puedes experimentar cambiando el signo de + por - en el código de nuestra función suma y ejecutar de nuevo la prueba, para ver que ocurre.

Código de ejemplo.

Puedes encontrar el código de este proyecto de ejemplo en el siguiente repositorio:

https://github.com/raag/Jest-test

Conclusión.

Este es el primero de un conjunto de artículos que quiero escribir, explicando el uso de jest, en próximos artículos, la idea es mostrar algunos usos más avanzados que puedas usar en tus aplicaciones.

Like