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/qunit
y accede a él:alumno@servidor:~ $ mkdir -p $HOME/www/qunit alumno@servidor:~ $ cd $HOME/www/qunit
Crea los directorios
css/qunit
yjs/lib/qunit
:alumno@servidor:~/www/qunit $ mkdir -p css/qunit js/lib/qunit
Descarga 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 files
La versión usada de QUnit es la 2.4.0.
Crea el archivo
index.html
con 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.js
se 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.js
se 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.js
han 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_el
es aplicado con0
debe regresar0
. - Cuando
Codigo.sumatoria_hasta_el
es aplicado con2
debe regresar3
. - Cuando
Codigo.sumatoria_hasta_el
es aplicado con6
debe regresar21
. - Cuando
Codigo.sumatoria_hasta_el
es aplicado conun número negativo
debe regresar0
. - Cuando
Codigo.sumatoria_hasta_el
es aplicado conun número flotante
debe regresar0
. - Cuando
Codigo.sumatoria_hasta_el
es aplicado conun booleano
debe regresar0
. - Cuando
Codigo.sumatoria_hasta_el
es aplicado conuna cadena de caracteres
debe regresar0
. - Cuando
Codigo.sumatoria_hasta_el
es aplicado conun objeto
debe regresar0
. - Cuando
Codigo.sumatoria_hasta_el
es aplicado conun arreglo
debe regresar0
. - Cuando
Codigo.sumatoria_hasta_el
es aplicadosin parámetro
alguno 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.