Tests unitaires javascript avec Buster.JS

Dans cet article je vais vous faire part de mon retour d'expérience avec l'outil de tests unitaires javascript "Buster.JS" (v0.6.2)

Buster.JS logo

Il existe de nombreux frameworks de tests unitaires javascript. Voici trois points qui m'ont poussé à essayer Buster.JS plus qu'un autre :

  • Une vidéo "Getting started" convaincante et une documentation relativement fournie.
  • Ses modes Node.js & "browser slaves" c'est à dire que les tests unitaires peuvent être exécutés sur un serveur Node.js ou dans des navigateurs web fonctionnant en mode esclave.
  • Son approche modulaire et extensible qui permet d'envisager l'évolution de l'outil et donc sa pérennité.

Commencer avec Buster.JS c'est rapide, alors allons y :

Buster.JS est un module Node.js. Son installation commence donc par l'installation de Node.js et se termine par celle du module node.js "buster" en tapant :

npm install -g buster

Le tour est joué.

Seconde étape, créez un fichier de configuration pour le projet que vous souhaitez tester. Par exemple :

/* fichier ./buster.js */
var config = module.exports;

config["Test unitaires javascript projet Démo"] = {
    environment: "browser", // sinon "node" pour lancer des tests Node.js
    sources: ["src/main/javascript/**/*.js"],
    tests: ["src/test/javascript/**/*.js"]
}

Il ne vous reste plus qu'à placer le code à tester dans le répertoire "src/main/javascript" et écrire les cas de test correspondants :

/* fichier ./src/test/javascript/demo-test.js */
buster.testCase("Test démo", {
    "Egalite avec type casting": function () {
        assert(1 == 1);  // écrivez pas des test pareils hein ? c'est juste un exemple ! ;)
        assert(1 == "1");
    },
    "Egalite stricte avec type casting": function () {
        assert(1 === 1);
        assert(1 !== "1");
    },
})

Nous sommes maintenant prêts à lancer nos tests en mode "browser", c'est à dire que leur exécution se fera sur des navigateurs, non sur un serveur node.js.

Commencez par démarrer un serveur http buster en tapant :

 buster server

Puis lancez autant de navigateurs que nécessaire pour l’exécution et la validation de vos tests. La virtualisation vous sera bien utile pour faire tourner de nombreux navigateurs de versions différentes en même temps. Sinon, des outils comme browserstack peuvent vous venir en aide.

Faites pointer vos navigateurs sur "http://<adresse-ip-de-votre-serveur>:1111" et cliquez sur "Capture browser". Chaque navigateur ainsi "capturé" fonctionnera en mode esclave pour exécuter les tests à la demande du serveur.

Buster.JS browser slaves

Vous pouvez maintenant lancer vos tests en tapant en ligne de commande :

buster test

Buster.JS Console

Comme vous pouvez le constater, démarrer avec Buster.JS et un jeu d'enfant. Mais pour avoir joué un peu avec, je dois dire que passé les premières impressions les choses se compliquent. En mode "browser", j'ai rapidement été confronté à différents soucis :

  • La commande "buster test" n'aboutit pas toujours lorsque certains vieux navigateurs sont capturés (firefox 4 par exemple)
  • Suite à un redémarrage du serveur http buster les esclaves ne se "raccrochent" pas correctement, j'ai dût régulièrement fermer les navigateurs avant de les recapturer (problèmes de sessions ?). Plus on a d'esclaves, plus c'est gênant !
  • Selon la documentation, IE7 et - sont supportés depuis la version 0.4.0. Mais il reste quelques soucis car je ne suis pas arrivé. Dommage car IE6 & 7 sont justement des candidats plutôt intéressants à capturer !
  • Impossible de définir les navigateurs cibles souhaités par projet (donc via le fichier de configuration buster.js) ce qui empêche d'avoir un seul serveur pour gérer des projets ayant des pré-requis de compatibilité différents.

Pour conclure, l'outil est certainement intéressant pour ceux qui veulent exécuter des tests en mode serveur Node.js mais pas vraiment mûr pour les tests côté browser. Pour cela TestSwarn est une alternative.

Comme indiqué en page d'accueil du site Buster.JS n'est qu'en version Beta, attendons de voir si, en 2013, il saura tirer son épingle du jeu face aux nombreux concurrents que sont TestSwarn, jsTestDriver, TestAcular, Jasmine, et tous les autres.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.