Ejecutar múltiples test de Casperjs con Gruntjs

Gruntjs es una librería escrita en JavaScript que nos facilita la ejecución de tareas, para poder ejecutar Gruntjs es necesario tener instalado NodeJs en nuestro equipo. Una de las cosas buenas de Gruntjs es que dispone de más de 4000 plugins que ayudan a trabajar con Gruntjs. Casperjs es una librería de JavaScript que entre otras cosas nos permite hacer test de usuarios en nuestras aplicaciones webs.

En este artículo no voy a pararme a explicar como instalar ninguna de las librerías mencionadas más arriba, si que voy a comentar como instalar la librería grunts-casperjs, es un plugin de Gruntsjs que permite ejecutar test desde la consola invocándolos mediante Gruntjs.

Antes de que continuéis con el artículo recomiendo leer los siguientes artículos Introducción a gruntjs y
Instalando Gruntjs, son los dos artículos que más me han ayudado para empezar con Gruntjs, y que os pueden servir si nunca lo habéis usado nunca y el ingles no se os da muy bien. Sino la documentación oficial de Gruntjs es muy completa.

Para instalar Gruntjs-casperjs ejecutamos en la consola:

npm install grunt-casperjs --save-dev


Una vez se ha instalado el plugin Gruntjs-casperjs vamos a ver como creamos nuestra primera tarea de Grunt-casperjs en el archivo Gruntfile.js

module.exports = function(grunt){

  grunt.initConfig({
    casperjslogin: {
      options: {
        async: {
          parallel: true
        },
        silent: false
      },
      files: [ 'tests/loginform_test.js]
    },
  });
  grunt.loadNpmTasks('grunt-casperjs');
  grunt.registerTask('default',[ 'casperjslogin' ]);
};



Con esta tarea podemos ejecutar la orden

Grunt casperjslogin <code> y Gruntjs se encargará de lanzar el test loginform_test.js

Le podemos pasar variables a Gruntjs cuando ejecutamos las tareas, en mi caso esta opción me ha permitido crear un código algo flexible, que me permite indicar en cual de los multisites (variable country) quiero realizar las preubas y cual de los test (variable test) quiero lanzar.

Este es mi código final en Gruntfile.js
<code>
module.exports = function(grunt){

  var country = grunt.option('country') || 'es';
  country = (country == 'all') ? '*' : country;

  var test = grunt.option('test') || 'test_callmeback';
  test = (test == 'all') ? '*' : test;

  grunt.initConfig({
    casperjs: {
      options: {
        async: {
          parallel: true
        },
        silent: false
      },
      files: [ country +  '/' + test + '.js']
    },
  });

  grunt.loadNpmTasks('grunt-casperjs');

  grunt.registerTask('default',[ 'casperjs' ]);

};

Para lanzar un test sería:

grunt casperjs --test=all --country=it



No es un código perfecto porque no es flexible al 100%, ya que o ejecutamos uno de los test o ejecutamos todos los test (variable test), y respecto al multisites (variable country), o ejecutamos en un sites, o ejecutamos en todos los sites. Pero lanzar todos los test e irte a tomar un café y ver los resultados a la vuelta ya es algo mejor que antes cuando tenía que lanzar todos los tests uno a uno para cada uno de los multisites.

Un saludo.

Oskar