Igual de importante que escribir features fantásticos para nuestras aplicaciones, librerías o extensiones es que escribamos buenas pruebas unitarias y de integración. Dado que javascript es un lenguaje que ha tomado mucho auge en los últimos años, es importante que aprendamos a crear pruebas unitarias de una forma correcta y elegante para nuestros proyectos.

En este tutorial pretendo explicarles como utilizar la librería mochaJS para realizar pruebas unitarias sobre nuestro código.

Mocha es un framework de pruebas escrito en javascript que puede correr tanto en node.js como en un navegador, este hace que escribir pruebas para nuestro código de manera asíncrona sea fácil y rápido.

Asumiendo que ya tienen un proyecto de javascript sobre el cual queremos comenzar a desarrollar nuestras pruebas el primer paso es instalar mocha de forma global:

$ npm install --global mocha

Instalarlo de forma global es recomendado si estamos en un ambiente de desarrollo, sin embargo, si pensamos poner nuestra aplicación en un pipeline de entrega continua en donde los ambientes en donde se construirá la aplicación no tienen instalado mocha, es conveniente que lo instalemos como una dependencia de desarrollo.

$ npm install --save-dev mocha

El siguiente paso es crear, dentro de nuestro proyecto, una carpeta que nombraremos test, y también agregar la siguiente instrucción en nuestro archivo package.json

"scripts": {
    "test": "mocha"
  },

Cabe mencionar que “scripts” debe ir al mismo nivel que dependencies y todos los otros metadatos que se encuentran en la raíz del objeto json que describe el archivo package.json

Como mocha es un framework que tiene como objetivo la legibilidad en las pruebas, hay dos funciones principales que nos ayudan a realizaras. Estas son: describe() it()

En donde describe, nos indica que estamos describiendo exactamente con nuestras pruebas, e.j: una clase, un método; e it  nos dice que hace ese método y si ha fallado en lo que tenia que hacer.

vamos a poner un ejemplo fácil:

var assert = require('assert');

describe('Array', function() {
  describe('#indexOf()', function() {
    it('debe retornar -1 cuando el valor no esta presente', function() {
      assert.equal([1,2,3].indexOf(4), -1);
    });
  });
});

describe it, recibe ambos como parámetro un string y una función callback. En el ejemplo anterior decimos que estamos describiendo de la clase Array el método  indexOf y en la función it hace la llamada que prueba el método con las condiciones anteriormente descritas.

Debemos mencionar que dentro de un describe pueden ir varios it

var assert = require('assert');

describe('Array', function() {
  describe('#indexOf()', function() {
    it('debe retornar -1 cuando el valor no esta presente', function() {
      assert.equal([1,2,3].indexOf(4), -1);
    });

    it('debe retornar la primera ocurrencia del valor especificado', function() {
      assert.equal([1,2,3].indexOf(3), 2);
    });
  });
});

En el caso anterior vemos que tenemos mas cobertura de las características del método, porque tenemos varios it dentro de un mismo describe.

Para correr las pruebas, en una terminal ponemos el siguiente comando en el directorio raíz del proyecto (donde se encuentra nuestro package.json)

npm test

El resultado debería ser un reporte muy fácil de leer

Array
    #indexOf()
      ? debe retornar -1 cuando el valor no esta presente
      ? debe retornar la primera ocurrencia del valor especificado


  1 passing (9ms)

Y así es como usamos mochaJS para las pruebas unitarias de nuestro proyecto. En tutoriales futuros haré un post explicando a detalle como hacer pruebas de integración con javascript.

 

 

Categorized in: