Mocha, un nuevo sabor en pruebas unitarias de Javascript

  • Por
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

  • Soporte para diferentes navegadores
  • Reportes de cobertura de código
  • Uso de cualquier librería de afirmaciones
  • Javascript api para ejecutar pruebas.
  • Soporte de Debugger para nodejs
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”.

Autor

Victor Tejada Yau

Soy Victor Tejada Yau mejor conocido en el mundo de la informática como “victortyau” , ingeniero informático de profesión pero profundamente apasionado por la programación me gusta aprender lenguajes de programación(java, php, html5, nodejs, coffeescript, css y google web toolkit, ruby on rails y muchos más) y naturales(inglés, portugués y catalán), pero soy un hombre con fe en DIOS desde el 2007 y hasta el día de hoy mi vida ha cambiado al 100%, mis pasatiempos favoritos son “La lectura, La Fotografía y Viajar”. Uno de mis grandes sueños es poder estudiar un master en redes de telecomunicaciones debido a que me gusta la investigación en el campo de las redes inalámbricas, en la prestigiosa universidad politécnica de Valencia, España. Sinceramente me gusta lo que hago y mi principal filosofía es “haz lo que te gusta y disfrútalo al máximo”.
Ingeniero informático

Compartir

Comentarios

newshub.es

16/2/2013
newshub.es
hola me gustaria poner su feed (RSS) en la categoria "INFORMATICA? del website http://www.newshub.es que es un portal de notícias actualizadas en tiempo real en mas de 40 categorias. las notícias son de los mas importante periódicos digitales y los mas influentes blogs de españa.gracias