Create SonarJSExo authored by Ioan-Marius Bilasco's avatar Ioan-Marius Bilasco
## JsTestDriver (sans accès root)
- [JsTestDriver](https://code.google.com/p/js-test-driver/) est un autre framework pour les tests JS.
- JSTD permet d'intégrer des données liées à la couverture des tests en exécutant les tests JavaScript en ligne de commande et en récupérant les données au moyen d'un plugin dédié coverage
- JSTD permet de réaliser les tests sur plusieurs navigateurs
- Télécharger le moteur JsTestDriver [ici](http://www.fil.univ-lille1.fr/~bilasco/TOOLS/JsTestDriver-1.3.5.jar) ou [ailleurs](https://code.google.com/p/js-test-driver/downloads/list)
- Télécharger le plugin coverage [ici](http://www.fil.univ-lille1.fr/~bilasco/TOOLS/coverage-1.3.5.jar) ou [ailleurs](https://code.google.com/p/js-test-driver/downloads/list) (mesurant la couverture des tests) et le placer à la racine de votre projet
- Télécharger les adaptateurs QUnit pour JSTestDriver [ici](http://www.fil.univ-lille1.fr/~bilasco/TOOLS/JSTDQUA.zip) ou [ailleurs](http://code.google.com/p/js-test-driver/source/browse/#svn/trunk/JsTestDriver/contrib/qunit/src)
- par défaut uniquement __module__, __test__ et __ok__ sont supportés ;
- dans le fichier QUnitAdaptor.js dans l'archive (ici) un support minimal a été ajouté pour __throws__, __equals__ et l'utilisation des __fixtures__ ;
- les courageux peuvent pousser encore plus l'adaptation ...
- Configurer le lien entre JsTestDriver et le projet en éditant à la racine du projet le fichier jsTestDriver.conf
```
server: http://localhost:9876
basepath: "."
plugin:
- name: "coverage"
jar: "coverage-1.3.5.jar"
module: "com.google.jstestdriver.coverage.CoverageModule"
load:
# Add these lines to load qunit, the equiv function and adapter in order, before the tests
- JSTDQUA/equiv.js
- JSTDQUA/QUnitAdapter.js
# And this loads the source files we are testing
- src/*.js
# This is where we load the qunit tests
- test/money_test.js
- test/money_ops_test.js
- test/calc_test.js
```
- Lancer le serveur sur le port choisi (9876)
```
java -jar PATH_TO/JsTestDriver-1.3.5.jar --port 9876
```
- on peut spécifier --runnerMode DEBUG pour avoir plus de détails
- on peut cibler un navigateur en indiquant --browser CHEMIN_VERS_BINAIRE_BROWSER
- assurez-vous que le serveur est bien lancé en se connectant à http://localhost:9876 (si vous n'avez pas indiqué --browser, il faut cliquer sur "Capture this browser")
- vous pouvez avoir différentes configurations serveur et client / navigateur
- Lancer le client en sauvegardant les informations d'analyse (des fois, il est nécessaire de le lancer deux fois)
```
java -jar PATH_TO/JsTestDriver-1.3.5.jar --config jsTestDriver.conf --tests all --testOutput forSonar
```
- Le plugin coverage sauvegarde des informations sur la couverture en forSonar/jsTestDriver.conf-coverage.dat
- les informations peuvent être exploitées et visualisées également en utilisant [genhtml doc](http://ltp.sourceforge.net/coverage/lcov/genhtml.1.php) [genhtml perl code](http://www.fil.univ-lille1.fr/~bilasco/TOOLS/genhtml)
## Integration Sonar & JsTestDriver
- Le lien entre le deux se fait en intégrant les données de couverture dans les Qube
```
--------------------------------------------
- Contenu sonar-project.properties -
--------------------------------------------
#remplacez X par votre numéro d'utilisateur
sonar.projectKey=fil:m2eserv
sonar.projectName=NOMPROJET
sonar.projectVersion=1.0
sonar.projectDescription=DESCRIPTION PROJET
# chemin vers les répertoires contenant les sources et les tests
sonar.sources=src
sonar.tests=test
# indication du langage utilisé dans le projet
sonar.language=js
# encodage des sources
sonar.sourceEncoding=UTF-8
# integration des données de couverture issues de JsTestDriver
sonar.javascript.lcov.reportPath=forSonar/jsTestDriver.conf-coverage.dat
```
### Exclusions
- Vous pouvez demander d'exclure de l'analyse certains dossiers/fichiers (notamment ceux provenant du code externe - frameworks JS, autres)
```
--------------------------------------------
- Contenu sonar-project.properties -
--------------------------------------------
...
# exclure tout un dossier
sonar.exclusions=CHEMIN_VERS_DOSSIER/**
...
```
### Projets multi-modules
- Vous pouvez configurer indépendamment plusieurs modules écrites en langages différents. Ci-dessous à titre d'exemple un projet contenant du code JS et du code PHP
```
--------------------------------------------
- Contenu sonar-project.properties -
--------------------------------------------
...
sonar.modules=module1,module2
module1.sonar.projectBaseDir=ROOT_SOURCE/js
module2.sonar.projectBaseDir=ROOT_SOURCE/php
...
```
### Grunt (nodejs), QUnit et Sonar
* il existe également la possibilité de réaliser des statistiques de couverture en utilisant [nodejs/grunt/grunt-croc-qunit/grunt-contrib-connect/serve-static/istanbul/phantomjs](CouvertureNodeJS)