Ya vimos en un artículo anterior que es eso del TDD y los test unitarios, en este vamos a ver como aplicarlo a SCP usando jasmine: una librería de javascript para hacer testing que viene incluida en xsjs.

Pasos previos

Si quieres probar en una cuenta Trial has de tener en cuenta que el suit de test en Hana no está habilitado por defecto. Tendrás que descargar e instalar el paquete HANA TEST TOOLS (lo encontrarás en la web de SAP en la ruta Support Packages and Patches > H > SAP HANA PLATFORM EDITION > SAP HANA PLATFORM EDITION 2.0 > HANA TEST TOOLS 1.0).
¿Y como lo instalo? Primero tendras que tener el rol sap.hana.xs.lm.roles::Administrator, despues ir al HANA Application Lifecycle Management.

Se accede desde Databases & Schemas:

Entras en la DB veras el enlace al Administrator Tools:

O puedes acceder directamente con la url:
http://chorizoDeLaDB.hanatrial.ondemand.com/sap/hana/xs/lm

No tiene perdida.

Si intentas ejecutar un test sin tener instalado el paquete, te saldrá el siguiente mensaje de error:

Para poder ejecutar los tests tendrás que tener el  rol sap.hana.testtools.common::TestExecute (que solo está disponible tras instalar el HANA TEST TOOLS).

Muy bien, ya tenemos todo listo, vamos al lío.

Entrando en harina

Creamos un archivo .xsjs que tiene que incluir «Test» en su nombre , o no aparecerá la opción de ejecutar el test.

La sintaxis no es compleja: con la función describe creamos un «bloque» en el que irán nuestros tests:

describe('Batería de tests unitarios de ...', function() {

});

Se pueden anidar tantos describes como quieras para agrupar los tests en diferentes niveles:

describe('Batería de tests unitarios', function() {
    describe('Funcionalidad A', function() {

    });
});

Dentro irán los test propiamente dichos:

describe('Batería de tests unitarios', function() {
    it('Test1', function() {

    });
    it('Test2', function() {

    });
});

Si por algún motivo queremos deshabilitar un test, basta con poner una x delante de it (xit) y así no se ejecutará:

describe('Batería de tests unitarios', function() {
    it('Test1', function() {

    });
    xit('Test2', function() {

    });
});

Mediante expect() se crea la afirmación que irá seguida de una comparación. Jasmine incluye bastantes comparaciones, pero vamos a trabajar con la dos más genéricas: toBe(expected) y toEqual(expected): la primera es como usar un === y la segunda se utiliza para hacer un Deep Equal (necesario si trabajamos con objetos, arrays,…)

describe('Batería de tests unitarios', function() {
    it('Test1', function() {
        expect('a').toBe('b');
    });
    it('Test2', function() {
        expect('a').toBe('a');
    });
    describe('Batería de tests unitarios con Deep Equal', function() {
        it('Test3', function() {
            expect([1,2]).toBe([1,2]);
        });
        it('Test4', function() {
            expect([1,2]).toEqual([1,2]);
        });
    });
});

Si lo ejecutamos veremos que se despliega una ventana a la derecha con el resultado de los tests:

 

Es un poco feo pero si pulsamos en el enlace «Create test report», la cosa cambia:

Se muestra el resultado de los tests en una web más bonita, con unas cuantas funcionalidades:

  • Arriba podemos ver los test que se han pasado y los que no (marcados con una X).
  • Los tests están agrupados en forma de árbol por los describe que hemos usado y cada elemento del árbol tiene un enlace para ejecutar solo esa parte (tanto un grupo como un único test).
  • En la vista Failures podemos ver únicamente los tests que no han pasado con información más detallada, incluso un enlace al archivo y la línea donde está el test:

Si todos los test están en verde, se muestra de la siguiente manera:

La web que he se ha generado la podemos invocar en cualquier momento para ver el resultado de los tests, si nos fijamos, en la url hay 2 argumentos: package y pattern. Jugando con ellos podemos ejecutar varios archivos a la vez . Por ejemplo si en package ponemos el directorio raíz y quitamos pattern podemos ejecutar todos los tests de una vez y ver si algo se ha roto.

¿A alguien más le suena ésto como una primera aproximación al Continuous Integration? Eso lo veremos más adelante, de momento doy por concluido este artículo sobre como hacer tests unitarios en SCP.

Categorías: SCP

Deja un comentario

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