Como logré encontrar una solución, pensé que sería una buena idea compartirla. El enfoque puede no ser perfecto, pero es el primero que parece funcionar. Siéntase libre de publicar mejoras y sugerencias.
Lo que hice en pocas palabras:
- lanzamiento de una instancia de Xvfb, un framebuffer virtual
- Usando JsTestDriver:
- lanzamiento de una instancia de Firefox en el uso de este dispositivo virtual (headlessly)
- captura la instancia de Firefox y ejecuta la suite de prueba
- generar resultados de las pruebas JUnit compatible .xml
- uso de bambú para inspeccionar el archivo de resultados para aprobar o no la acumulación
próxima voy a ir a través de las fases más detalladas.Esto es lo que mi mi estructura de directorios terminó pareciéndose a:
lib/
JsTestDriver.jar
test/
qunit/
equiv.js
QUnitAdapter.js
jsTestDriver.conf
run_js_tests.sh
tests.js
test-reports/
build.xml
En el servidor de compilación:
- Instalar Xvfb (
apt-get install Xvfb
)
- Instalar Firefox (
apt-get install firefox
)
En su aplicación que se construirá:
server: http://localhost:4224
load:
# Load QUnit adapters (may be omitted if QUnit is not used)
- qunit/equiv.js
- qunit/QUnitAdapter.js
# Tests themselves (you'll want to add more files)
- tests.js
crear un script f ile para ejecutar las pruebas unitarias y la generación de resultados de la prueba (ejemplo, 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."
Crear una tarea Ant que llama a la secuencia de comandos:
<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>
Por último, decirle al bambú construir plan para tanto invoque el objetivo test
y busque los resultados de la prueba JUnit. Aquí el valor predeterminado "**/test-reports/*.xml"
funcionará bien.
Is parece Joshua Flanagan ha llegado con algo similar en un entorno C#/IE, utilizando Watin, NUnit y IterativeTest: http://www.lostechies.com/blogs/joshuaflanagan/ archive/2008/09/18/running-jquery-qunit-tests-under-continuous-integration.aspx? CommentPosted = true # commentmessage – miek
RhinoUnit proporciona la capacidad de ejecutar pruebas de unidades JS sin tener en cuenta, sin embargo, agregar soporte para QUnit probablemente requeriría algo de trabajo adicional: http://code.google.com/p/rhinounit/ – miek