QUnit
QUnit es un framework para la realización de pruebas unitarias a código en JavaScript.
Una prueba unitaria establece la correcta o incorrecta ejecución de una unidad de código. En este caso la unidad de código sobre la cual se establecerán pruebas es una función, por lo tanto, una prueba unitaria establecerá la aplicación de una función y un valor esperado como resultado de dicha función, si la función regresa el valor esperado se considerará una prueba exitosa y en caso contrario será una prueba fallida.
Las pruebas unitarias se establecen mediante QUnit, quien las ejecuta y nos muestra mediante un documento HTML los resultados de haber ejecutado dichas pruebas unitarias.
La documentación de Qunit podrás encontrarla en http://api.qunitjs.com/category/all/.
Uso
Crea el directorio
$HOME/www/qunity accede a él:alumno@servidor:~ $ mkdir -p $HOME/www/qunit alumno@servidor:~ $ cd $HOME/www/qunitCrea los directorios
css/qunityjs/lib/qunit:alumno@servidor:~/www/qunit $ mkdir -p css/qunit js/lib/qunitDescarga los archivos de js y css de QUnit en los directorio anteriormente creados:
alumno@servidor:~/www/qunit $ wget -c https://code.jquery.com/qunit/qunit-2.4.0.css -O css/qunit/qunit.css alumno@servidor:~/www/qunit $ wget -c https://code.jquery.com/qunit/qunit-2.4.0.js -O js/lib/qunit/qunit.js alumno@servidor:~/www/qunit $ pwd && tree /home/alumno/www/qunit . ├── css │ └── qunit │ └── qunit.css ├── index.html └── js ├── codigo.js ├── lib │ └── qunit │ └── qunit.js └── tests └── codigo.js 6 directories, 5 filesLa versión usada de QUnit es la 2.4.0.
Crea el archivo
index.htmlcon el siguiente contenido (basado en el ejemplo encontrado en la página oficial de QUnit):<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>qunit</title> <link rel="stylesheet" href="css/qunit/qunit.css"> </head> <body> <div id="qunit"></div> <div id="qunit-fixture"></div> <script src="js/lib/qunit/qunit.js"></script> </body> </html>Inicia a
thttpd:alumno@servidor:~/www/qunit $ thttpd -D -p 8080 -nor -l -Accede a http://127.0.0.1:8080 para observar el resultado de ejecutar los test mediante QUnit, ninguno hasta el momento.
Suponiendo que tienes el archivo js/codigo.js con codigo a probar, puedes establecer tus pruebas unitarias
en el archivo js/tests/codigo.js, vínculando ambos archivos a index.html mediante la etiqueta script:
<script src="js/codigo.js"></script>
<script src="js/tests/codigo.js"></script>
Tests
En el archivo
js/codigo.jsse puede definir el siguiente módulo:var Codigo = (function() { var _sumatoria_hasta_el = function(final) { // Falta la implementación de esta función }; return { "sumatoria_hasta_el": _sumatoria_hasta_el }; })();En el archivo
js/tests/codigo.jsse puede definir el siguiente conjunto de tests:QUnit.test("Tests de sumatoria_hasta_el", function(assert) { // 1 assert.strictEqual( Codigo.sumatoria_hasta_el(0), 0, "Sumando hasta el 0: 0 + 0" ); // 2 assert.strictEqual( Codigo.sumatoria_hasta_el(2), 3, "Sumando hasta el 2: 0 + 1 + 2" ); // 3 assert.strictEqual( Codigo.sumatoria_hasta_el(6), 21, "Sumando hasta el 6: 0 + 1 + 2 + 3 + 4 + 5 + 6" ); // 4 assert.strictEqual( Codigo.sumatoria_hasta_el(-4), 0, "Dado un número negativo" ); // 5 assert.strictEqual( Codigo.sumatoria_hasta_el(10.3), 0, "Dado un número flotante" ); // 6 assert.strictEqual( Codigo.sumatoria_hasta_el(true), 0, "Dado un booleano" ); // 7 assert.strictEqual( Codigo.sumatoria_hasta_el(""), 0, "Dada una cadena de caracteres" ); // 8 assert.strictEqual( Codigo.sumatoria_hasta_el({}), 0, "Dado un objeto" ); // 9 assert.strictEqual( Codigo.sumatoria_hasta_el([]), 0, "Dado un arreglo" ); // 10 assert.strictEqual( Codigo.sumatoria_hasta_el(), 0, "Sin parámetro" ); });Accede a http://127.0.0.1:8080, obtendrás el documento HTML quien te indicará que los 9 tests establecidos en
js/tests/codigo.jshan fallado. Para hacer que los tests pasen edita el archivojs/codigo.js, implementando la funciónCodigo.sumatoria_hasta_el. Observa lo establecido por los tests:- Cuando
Codigo.sumatoria_hasta_eles aplicado con0debe regresar0. - Cuando
Codigo.sumatoria_hasta_eles aplicado con2debe regresar3. - Cuando
Codigo.sumatoria_hasta_eles aplicado con6debe regresar21. - Cuando
Codigo.sumatoria_hasta_eles aplicado conun número negativodebe regresar0. - Cuando
Codigo.sumatoria_hasta_eles aplicado conun número flotantedebe regresar0. - Cuando
Codigo.sumatoria_hasta_eles aplicado conun booleanodebe regresar0. - Cuando
Codigo.sumatoria_hasta_eles aplicado conuna cadena de caracteresdebe regresar0. - Cuando
Codigo.sumatoria_hasta_eles aplicado conun objetodebe regresar0. - Cuando
Codigo.sumatoria_hasta_eles aplicado conun arreglodebe regresar0. - Cuando
Codigo.sumatoria_hasta_eles aplicadosin parámetroalguno debe regresar0.
- Cuando
Tip: observa que pasa si implementas la función Codigo.sumatoria_hasta_el con lo siguiente y
recargas el documento HTML:
var _sumatoria_hasta_el = function(final) {
return 0;
};
Lecturas
- Unit Test: La importancia de usar tests unitarios por Manel Pérez Mata.
- Tests Unitarios, ¿Valen la pena? por Daniel Izquierdo.
- Testing en JavaScript para desarrolladores web
- La importancia de las pruebas unitarias –> Unit Tests por Diego Rojas.