Comme j'ai réussi à trouver une solution moi-même, j'ai pensé que ce serait une bonne idée de la partager. L'approche n'est peut-être pas sans faille, mais c'est la première qui m'a semblé fonctionner. N'hésitez pas à poster des améliorations et des suggestions.
Ce que j'ai fait en un mot :
- Lancer une instance de Xvfb un framebuffer virtuel
- Utilisation de JsTestDriver :
- lancer une instance de Firefox dans le framebuffer virtuel (sans tête)
- capturer le Firefox et exécuter la suite de tests
- générer des résultats de test conformes à JUnit .XML
- Utiliser Bamboo pour inspecter le fichier de résultats pour réussir ou échouer la construction.
Je vais ensuite passer en revue les phases plus détaillées. Voici à quoi ma structure de répertoire a fini par ressembler :
lib/
JsTestDriver.jar
test/
qunit/
equiv.js
QUnitAdapter.js
jsTestDriver.conf
run\_js\_tests.sh
tests.js
test-reports/
build.xml
Sur le serveur de construction :
- Installer Xvfb (
apt-get install Xvfb
)
- Installez Firefox (
apt-get install firefox
)
dans votre application à construire :
Créer un fichier script pour exécuter les tests unitaires et générer les résultats des tests (exemple en Bash, run_js_tests.sh
):
#!/bin/bash
# directory to write output XML (if this doesn't exist, the results will not be generated!)
OUTPUT_DIR="../test-reports"
mkdir $OUTPUT_DIR
XVFB=`which Xvfb`
if [ "$?" -eq 1 ];
then
echo "Xvfb not found."
exit 1
fi
FIREFOX=`which firefox`
if [ "$?" -eq 1 ];
then
echo "Firefox not found."
exit 1
fi
$XVFB :99 -ac & # launch virtual framebuffer into the background
PID_XVFB="$!" # take the process ID
export DISPLAY=:99 # set display to use that of the xvfb
# run the tests
java -jar ../lib/JsTestDriver.jar --config jsTestDriver.conf --port 4224 --browser $FIREFOX --tests all --testOutput $OUTPUT_DIR
kill $PID_XVFB # shut down xvfb (firefox will shut down cleanly by JsTestDriver)
echo "Done."
Créer une cible Ant qui appelle le script :
<target name="test">
<exec executable="cmd" osfamily="windows">
<!-- This might contain something different in a Windows environment -->
</exec>
<exec executable="/bin/bash" dir="test" osfamily="unix">
<arg value="run_js_tests.sh" />
</exec>
</target>
Enfin, indiquez au plan de construction de Bamboo d'invoquer à la fois la commande test
et recherchez les résultats des tests JUnit. Ici, la cible par défaut "**/test-reports/*.xml"
fera l'affaire.