> Manuales > Taller de Javascript

Mocha Framework de Javascript maduro y que está creciendo en el ámbito de pruebas unitarias.

A mocha se le puede definir como un framework de pruebas rico en características que puede ser implementado en nodejs o por medio de un navegador, mocha ejecuta las pruebas en serie permitiendo reportes flexibles y exactos, haciendo que el código pasado pruebas sea óptimo al momento de estar en producción. Pero se puede resumir la definición de mocha en tres palabras “simple”, “flexible” y “divertido”

Características o Atributos

Solo se mencionan cinco atributos pero existen más que parecen que van en aumento debido a que mocha este cada día creciendo en el campo de pruebas unitarias.

Instalación

La instalación para explicar los ejemplos se hará de la manera más sencilla por medio de npm(gestionador de paquetes de nodejs), pero para poder realizar esta operación necesitamos tener instalado nodejs y por medio de este enlace http://nodejs.org/download/ se puede descargar y tiene soporte para muchos sistemas operativos.

npm install -g mocha (por medio de la línea de comandos)

Una vez instalado el paquete ya se pueden hacer las pruebas unitarias, pero antes de eso se debe brindar conceptos con sus respectivos ejemplos para entenderlos de una mejor manera.

Assertions o Afirmaciones

Mocha te permite utilizar cualquier librería de afirmaciones como por ejemplo should.js, expect.js, chai y better-assert lo que hace que sea más flexible a los gustos de los programadores por una librería en particular.

Nota: Antes de hacer el ejemplo se deben tener los archivos de una prueba unitaria en una carpeta en particular y después ejecutar el comando “mocha”

Por medio de la línea de comandos ejecutamos las siguientes sentencias mkdir PU_Mocha usas tu editor favorito en mi caso uso “gvim” y creó el archivo llamado “prueba.js”

Ejemplo:

var assert = require("assert");
describe("Cadenas",function(){
describe("subcadenas",function(){
   it('deberia retornar una sub cadenas',function(){
   assert.equal("Bello","Panama es Bello".substring(10,15));
   })
})
});

Explicación:

Una vez escrita la prueba unitaria ejecutamos el siguiente comando “mocha prueba.js” y se presenta una salida como en la siguiente imagen.

La primera línea de código llama a la librería “assert” para tener una variable y poder realizar las afirmaciones.
La segunda línea describe un módulo llamado “Cadenas” esto quiere decir que dentro del mismo se manipulan cadenas de caracteres.
La tercera línea describe un submódulo llamado “subcadenas” para referirse que las pruebas unitarias dentro de él serán respecto a las mismas.
La cuarta línea describe el nombre de la prueba unitaria.
La quinta línea verifica si la subcadena se encuentra dentro de la cadena.

Para el siguiente ejemplo utilizaremos una librería de afirmaciones que en este caso es la gran y famosa “should.js” y se instalará de la siguiente forma npm install should.

Ejemplo:

var should = require("should");
describe("Cadenas",function(){
describe("subcadenas",function(){
   it('usando la libreria should',function(){
   'Panama es Bello'.substring(10,15).should.equal('Bello');
   });
});
});

Explicación:

La primera línea incluye la librería should, qué es con la ejecutaremos la prueba unitaria.
La quinta línea es donde es donde se ejecuta la prueba de la subcadena mediante la variable “should”
Este ejemplo muestra lo sencillo que es poder usar esta gran librería.

Organizaciones

Las organizaciones o setups nos permiten tener nuestras pruebas unitarias más claras al momento de crear variables y segmentar nuestro código, además es más legible al momento de que otro programador ve nuestras pruebas unitarias.

Ejemplo:

describe('calculadora', function(){
var a,b;
beforeEach(function(){
   a = 4;
   b = 2;
});

describe('operaciones básicas' ', function(){
   it('suma',function(){
   assert.equal(a + b,6);
   });

   it('resta',function(){
   assert.equal(a - b,2);
   });
});
});

Explicación:

El ejemplo muestra que las variables “a” y “b” adquieren sus respectivos valores cada vez que se ejecuta una prueba unitaria y no hay necesidad de crear variables por cada prueba. Es una manera más sencilla de poder realizar el trabajo.

Pruebas Exclusivas

La característica de exclusividad se le puede dar a un módulo o una prueba específica para poder enfocarnos nuestras pruebas unitarias en un código en específico. Es un atributo que facilita hacer pruebas de nuestro código javascript, para esta sección se presentan dos ejemplos que ampliarán la teoría descrita.

Ejemplo:

describe('Calculadora',function(){

var a,b;

beforeEach(function(){
   a = 4;
   b = 2;
});

describe('operaciones basicas 1',function(){
   it('suma',function(){
   assert.equal(a + b,6);
   });
   
   it('resta',function(){
   assert.equal(a - b,2);
   });
});

describe.only('operaciones basicas 2',function(){
   it('multiplicacion',function(){
   assert.equal(a * b,8);
   });
   
   it('division', function(){
   assert.equal(a / b, 2);
   });
});

});

Explicación:

La palabra reservada “only” es la que nos permite solo ejecutar el modulo llamado “operaciones básicas 2” lo que quiere decir que solo se ejecuta solo dos pruebas unitarias.

Ejemplo:

describe('calculadora',function(){
describe('operaciones especiales',function(){
   it('raiz cuadrada',function(){
   assert.equal(Math.sqrt(16),4);
   });
   
   it.only('exponentes',function(){
   assert.equal(Math.pow(4,2),16);
   });
});
});

Explicación:

Dentro del módulo llamado “operaciones especiales” solamente se ejecuta la prueba unitaria de “exponentes” porque tiene la palabra reservada “only”. Algo muy bueno dentro de este framework.

Pruebas no Exclusivas

Las pruebas no exclusivas nos permiten ignorar módulos o pruebas unitarias que no tienen alta prioridad al momento de ejecutar las pruebas Con los dos siguientes ejemplos se muestro lo descrito en la teoría.

Ejemplo:

describe('Gestion de cadenas',function(){
describe.skip('subcadenas',function(){
   it('prueba de subcadena',function(){
   assert.equal("Bella","Panama es Bella".substring(10,15));
   });
});

describe('contador',function(){
   it('cantidad de caracteres',function(){
assert.equal("Panama es Bella".length,15);
   });
});
});

Explicación:

Al ejecutar este código en la consola se muestra un mensaje de que existen pruebas unitarias pendientes, gracias a la palabra reservada “skip” en el módulo llamado “subcadenas”.

Ejemplo:

describe('Gestion de cadenas',function(){
describe('subcadenas',function(){
   it('prueba de subcadena',function(){
   assert.equal("Bella","Panama es Bella".substring(10,15));
   });
});

describe('contador',function(){
   it.skip('cantidad de caracteres',function(){
assert.equal("Panama es Bella".length,15);
   });
});
});

Explicación:

Con el ejemplo siempre quedará una prueba unitaria pendiente que es la llamada “cantidad de caracteres” la cual tiene la palabra reservada “skip”.

Con lo poco que se ha podido ver de “Mocha” se puede llegar a la conclusión que sería una buena herramienta para implementarla en nuestros proyectos personales como también en nuestros proyectos para clientes, además que tiene un rango de facilidades para los gustos de muchos programadores, en mi opinión personal este framework tiene un buen futuro por delante y solo esperar que de nuevo nos traerá el gran “Mocha”. Solo falta decir “Happy Testing”.

Victor Tejada Yau

Ingeniero informático

Manual