Uno de los puntos quizás más complejos en Jasmine ,es la forma de organizar los tests, Jasmine nos permite mucha flexibilidad a la hora de organizar nuestros tests, aunque por defecto Jasmine provee una estructura, podemos definir la nuestra basado a nuestra necesidades, en mi caso utilizo la siguiente:

NbaFinalsApp
 /modules
      teams/team.js
      players/players.js
 /tests
      teams/team.spec.js
      players/players.spec.js
 SpecRunner.html
          ...

En este ejemplo tenemos 1 SpecRunner para todo el proyecto, pero puede ser un SpecRunner por modulos.

Con la estructura definida a nivel de ficheros y directorios, nos falta organizarlos dentro de Jasmine.

En Jasmine los test se organizan usando describe, ya que nos permite agrupar los test en secciones y anidarlos.

Ejemplo:

describe("NBA Finals",function(){
   describe('si Lebron anota 40', function(){
    });
    describe('si Irving anota 40', function(){
    });
})

Para escribir test con Jasmine es fácil, primero la función  “describe” y luego nos apoyamos en las diferentes  funciones que nos provee el framework.

Entre las funciones tenemos, it() que es contenedor de unit test, la cual podemos anidar con la función describe además tenemos beforeEach y afterEach nos sirven para configurar y preparar configuraciones de los test y los Matchers para verificar o validar el resultado.

Jasmine tiene un sin número de Matchers para realizar comparaciones en nuestros tests, entre los Matchers que contiene listare algunos:

expext(obj).toEqual(otherobj) para comparar objetos.
expect(obj).toBe(otherobj); utiliza ===
expect(obj).toMatch(regularexpresion): Compara a partir de una expresion regular.
expect(object).toBeDefined()

Si deseas ver la lista completa puede ir a la documentacion oficial http://jasmine.github.io/2.0/introduction.html

Pero también nos permite crear nuestro propios Matcher, en mi ejemplo quiero verificar si es el número 23.

Para crear un Matcher propio debemos realizarlo en la función beforeEach() y utilizando la función this.addMatchers() y podemos agregar un mensaje al error.

La función addMatchers, contiene la función “compare” retorna un objeto result  que en la propiedad pass podemos asignar el resultado de nuestra verificacion retornando un boolean ademas y  en propiedad message asignar el resultado del test.

Más informacion: http://jasmine.github.io/edge/custom_matcher.html

Pero veamos todo esto en la práctica.

Con describe defino el test,  usando beforeEach defino las variables para el test, jasmine.addMatcher creo Matcher “IsKing” que verifica si el jugador tiene el número 23, con it defino las pruebas unitarias donde usare los diferentes Matchers de Jasmine y el Matcher “IsKing”.

Si quieren ver todo en funcionamiento puede bajar el proyecto de ejemplo el cual contiene las clases a las cuales hago referencia en el test y explicada en el inicio.

describe("NBA Finals", function () {
   var lebron;
   var irving;
   beforeEach(function () {
       lebron = new Player("lebron", "", 0, true);
       irving = new Player("Irving", "1", false);
       jasmine.addMatchers({
           IsKing: function () {
               return {
                   compare: function (playernumber) {
                      var result = { pass: playernumber === 23 };
                       if (result.pass) {
                           result.message = "Si es 23";
                       } else {
                           result.message = "No es 23 es " + playernumber;
                       }
                       return result;
                   }
               }
           }
       });
   });
    describe('Cavs', function () {
       it("Lebron esta cancha", function () {
           expect(lebron).toBeDefined();
       });
       it("Es el numero 23", function () {
           expect(irving.playernumber).IsKing();
       })
       it("Tiene el balon", function () {
           expect(lebron.containsballon).toBe(true);
       });
   });
})

Si corremos el Test en el browser veremos que falla ya que estamos pasando el jugador irving en el test del numero 23.

Jasmine

Ahora solo  pasar el objeto lebron y nuestros test pasara sin problemas.

Jasmine

Para más información la documentación oficial:
http://jasmine.github.io/edge/custom_matcher.html

Descargar el código:
https://github.com/danywalls/organizando-con-jasmine

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *