Diferencia entre revisiones de «Test de javascript con QUnit»

De Dos Ideas.
Saltar a: navegación, buscar
 
(No se muestran 23 ediciones intermedias de 3 usuarios)
Línea 1: Línea 1:
Test de javascript con QUnit
+
== ¿Qué es QUnit? ==
QUnit es una potente herramienta para testear javascript.
 
  
Para utilizar QUnit, se tiene que incluir a los archivos qunit.js, qunit.css y un HTML para mostrar los resultados de las pruebas.
+
QUnit es una potente herramienta para testear javascript.
 +
 
 +
== Escribir test unitarios con QUnit  ==
 +
 
 +
Lo primero que se debe hacer es configurar el ambiente de test.
 +
 
 +
Para utilizar QUnit se deben usar los siguientes archivos: qunit.js y qunit.css. El qunit.js es un script con la libreria, y el qunit.css es una hoja de estilo y es opcional.
 +
 
 +
<code xml="xml">
 +
<link rel="stylesheet" type="text/css" href="http://github.com/jquery/QUnit/raw/master/QUnit/QUnit.css" media="all" />
 +
<script type="text/javascript" src="http://github.com/jquery/QUnit/raw/master/QUnit/QUnit.js"></script>
 +
</code>
 +
 
 +
Además de estos archivos, nuestras aplicaciones tienen que contar con una serie de etiquetas HTML donde se mostrarán los resultados de nuestros tests:
 +
 
 +
<code xml="xml">
 +
<h1 id="QUnit-header">QUnit Test Suite</h1>
 +
<h2 id="QUnit-banner"></h2>
 +
<div id="QUnit-testrunner-toolbar"></div>
 +
<h2 id="QUnit-userAgent"></h2>
 +
<ol id="QUnit-tests"></ol>
 +
</code>
 +
 
 +
A continuación se deja un ejemplo completo de un html donde se incluyen los archivos y las etiquetas html que necesita QUnit.
 +
 
 +
<code xml="xml">
 +
 
 +
<!DOCTYPE html>
 +
<html>
 +
<head>
 +
<title>Dos Ideas - QUnit</title>
 +
<script src="http://code.jquery.com/jquery-latest.js"></script>
 +
<link rel="stylesheet" href="http://code.jquery.com/qunit/git/qunit.css" type="text/css" media="screen" />
 +
<script type="text/javascript" src="http://code.jquery.com/qunit/git/qunit.js"></script>
 +
<!-- Your source files go here -->
 +
<script type="text/javascript" src="dosIdeas.js"></script>
 +
 
 +
<!-- Your tests files go here -->
 +
<script type="text/javascript" src="dosIdeasTest.js"></script>
 +
 
 +
</head>
 +
<body>
 +
<h1 id="qunit-header">QUnit example</h1>
 +
<h2 id="qunit-banner"></h2>
 +
<div id="qunit-testrunner-toolbar"></div>
 +
<h2 id="qunit-userAgent"></h2>
 +
<ol id="qunit-tests"></ol>
 +
 
 +
<!-- Any HTML you may require for your tests to work properly -->
 +
<div id="qunit-fixture">test markup, will be hidden</div>
 +
</body>
 +
</html>
 +
 
 +
</code>
 +
 
 +
El codigo que se va a testear debe estar en dosIdeas.js y los test en dosIdeasTest.js. Para correr los test simplemente se debe abrir el html en el browser.
 +
 
 +
El archivo dosIdeasTest.js:
 +
 
 +
<code xml="xml">
 +
 
 +
$(document).ready(function(){
 +
 
 +
module("dosIdeasTest");
 +
 
 +
test('probando validarImporte()', function() {
 +
ok(validarImporte("1112"),'El importe es 1112');
 +
ok(!validarImporte("11A12"),'El importe es 11A12');
 +
ok(!validarImporte("A1112"),'El importe es A1112');
 +
ok(!validarImporte("1112A"),'El importe es 1112A');
 +
})
 +
 +
test('probando extraerSubCadena()', function() {
 +
equal(extraerSubCadena("dosIdeas",3,5),'Ideas');
 +
equal(extraerSubCadena("dosIdeas",3,5),'deas');
 +
})
 +
 
 +
});
 +
 
 +
</code>
 +
 
 +
<br> El archivo dosIdeas.js:
 +
 
 +
<code xml="xml">
 +
 
 +
function validarImporte(importe) {
 +
 
 +
        if (importe.length == 0) {
 +
            return false;
 +
        } else {
 +
            if (!/^[1-9][0-9]*(?:\.)?[0-9]?[0-9]?$/.test(importe.replace(',','.'))) {
 +
                return false;
 +
            }
 +
        }
 +
        return true;
 +
    }
 +
 +
function extraerSubCadena(cadena, posicionInicial, longitud)
 +
{
 +
return cadena.substr(posicionInicial, longitud);
 +
}
 +
 
 +
</code>
 +
 
 +
El resultado de los test quedan de la siguiente manera:
 +
 
 +
[[Image:DosIdeasQUnitResultado.jpg]]
 +
 
 +
== Asserts  ==
 +
 
 +
Qunit nos provee de una serie de asserts para nuestros test. En el ejemplo anterior se hace mención de ok y equal. A continuación vamos a dar más detalle de los mismos y de nuevos.
 +
 
 +
'''ok''':
 +
Es para validar resultado booleanos (es el equivalente a assertTrue de JUnit).
 +
 
 +
La sintaxis es la siguiente: ok(estado, mensaje).
 +
 
 +
estado: es una expresión booleana a evaluar.
 +
 
 +
mensaje: es el mensaje a mostrar cuando finaliza el assert.
 +
 
 +
Ejemplo:
 +
<code xml>
 +
ok(validarImporte("1112"),'El importe es 1112');
 +
</code>
 +
 
 +
'''equal''':
 +
Valida que el resultado obtenido es igual al esperado (es similiar al assertEqual de JUnit).
 +
 
 +
La sintaxis es la siguiente: equal(actual, esperado, mensaje)
 +
 
 +
actual: es el objeto a evaluar.
 +
 
 +
esperado: es el resultado esperado.
 +
 
 +
mensaje: es el mensaje a mostrar cuando finaliza el assert.
 +
 
 +
Ejemplo:
 +
<code xml>
 +
equal(extraerSubCadena("dosIdeas",3,5),'Ideas');
 +
</code>
 +
 
 +
 
 +
==Integracion continua con Jenkins==
 +
 
 +
Qunit-test-runner (QTR) es un proyecto que te permite integrar tus test de QUnit mediante una simple tarea ant.
 +
 
 +
QTR provee un entorno de JavaScript dentro de una JVM para la ejecucion de los test de QUnit y el reporte de los resultados en un formato JUnit XML standard.
 +
Por lo tanto, QTR permite una fácil integracion con los sistemas de CI (Integracion Continua) como Jenkins/Hudson, dando visibilidad inmediata de los test de QUnit junto a los test de JUnit.
 +
 
 +
 
 +
* Bajar la libreria [http://code.google.com/p/qunit-test-runner/downloads/list qunit-test-runner-0.0.1-SNAPSHOT-jar-with-dependencies.jar] y agregarla en el classpath de Run Test (en Netbeans) del proyecto.
 +
 
 +
 
 +
* Generar un '''<nombre del Test>Recipe.js''' con la funcion loadFiles utilizada por QTR.
 +
 
 +
Ejemplo: pagoConTarjetaTestRecipe.js
 +
 
 +
<code javascript>
 +
loadFiles([
 +
  "../../siteApache/home/js/jquery-1.3.2.js",
 +
  "../../siteApache/home/js/validate.js", 
 +
  "../../siteApache/home/js/pagoConTarjeta.js",
 +
  "pagoConTarjetaTest.js"
 +
])
 +
</code>
 +
 
 +
 
 +
* Agregar las siguientes tareas ant al build.xml del proyecto.
 +
 
 +
<code xml>
 +
<target name="qunit" depends="init">
 +
    <path id="qunit-test-runner.path">
 +
        <fileset dir="${basedir}">
 +
            <include name="${file.reference.qunit-test-runner-0.0.1-SNAPSHOT-jar-with-dependencies.jar}" />
 +
        </fileset>
 +
    </path>
 +
    <taskdef classpathref="qunit-test-runner.path" resource="tasks.properties"/>
 +
</target>
 +
 
 +
<target name="report-jstest-pnt" depends="qunit">
 +
    <mkdir dir="${report.dir}" />
 +
    <qunit basedirectory="${basedir}/${test.javascript.dir}"
 +
        reportdirectory="${report.dir}">
 +
    </qunit>
 +
       
 +
    <!-- Create a JUnit report containing the QTR test results. -->
 +
    <mkdir dir="${report.dir}/html" />
 +
    <junitreport todir="${report.dir}/html">
 +
      <fileset dir="${report.dir}">
 +
            <include name="TEST-qunit-*.xml"/>
 +
        </fileset>
 +
        <report format="frames" todir="${report.dir}/html"/>
 +
    </junitreport>
 +
</target>
 +
</code>
 +
 
 +
 
 +
* Activar en el proyecto de Jenkins, la opcion publish HTML reports y apuntar al directorio donde se generan los reportes HTML a la pagina index.html
 +
 
 +
 
 +
== Ver también  ==
 +
[http://docs.jquery.com/Qunit Página de QUnit]
 +
[http://code.google.com/p/qunit-test-runner/ Página de QTR (proyecto Qunit-test-runner)]

Revisión actual del 15:13 31 ago 2011

¿Qué es QUnit?

QUnit es una potente herramienta para testear javascript.

Escribir test unitarios con QUnit

Lo primero que se debe hacer es configurar el ambiente de test.

Para utilizar QUnit se deben usar los siguientes archivos: qunit.js y qunit.css. El qunit.js es un script con la libreria, y el qunit.css es una hoja de estilo y es opcional.

<link rel="stylesheet" type="text/css" href="http://github.com/jquery/QUnit/raw/master/QUnit/QUnit.css" media="all" /> <script type="text/javascript" src="http://github.com/jquery/QUnit/raw/master/QUnit/QUnit.js"></script>

Además de estos archivos, nuestras aplicaciones tienen que contar con una serie de etiquetas HTML donde se mostrarán los resultados de nuestros tests:

QUnit Test Suite

    A continuación se deja un ejemplo completo de un html donde se incluyen los archivos y las etiquetas html que necesita QUnit.

    <!DOCTYPE html> <html> <head> <title>Dos Ideas - QUnit</title> <script src="http://code.jquery.com/jquery-latest.js"></script> <link rel="stylesheet" href="http://code.jquery.com/qunit/git/qunit.css" type="text/css" media="screen" /> <script type="text/javascript" src="http://code.jquery.com/qunit/git/qunit.js"></script> <script type="text/javascript" src="dosIdeas.js"></script>

    <script type="text/javascript" src="dosIdeasTest.js"></script>

    </head> <body>

    QUnit example

      test markup, will be hidden

      </body> </html>

      El codigo que se va a testear debe estar en dosIdeas.js y los test en dosIdeasTest.js. Para correr los test simplemente se debe abrir el html en el browser.

      El archivo dosIdeasTest.js:

      $(document).ready(function(){

      module("dosIdeasTest");

      test('probando validarImporte()', function() { ok(validarImporte("1112"),'El importe es 1112'); ok(!validarImporte("11A12"),'El importe es 11A12'); ok(!validarImporte("A1112"),'El importe es A1112'); ok(!validarImporte("1112A"),'El importe es 1112A'); })

      test('probando extraerSubCadena()', function() { equal(extraerSubCadena("dosIdeas",3,5),'Ideas'); equal(extraerSubCadena("dosIdeas",3,5),'deas'); })

      });


      El archivo dosIdeas.js:

      function validarImporte(importe) {

             if (importe.length == 0) {
                 return false;
             } else {
                 if (!/^[1-9][0-9]*(?:\.)?[0-9]?[0-9]?$/.test(importe.replace(',','.'))) {
                     return false;
                 }
             }
             return true;
         }
      

      function extraerSubCadena(cadena, posicionInicial, longitud) { return cadena.substr(posicionInicial, longitud); }

      El resultado de los test quedan de la siguiente manera:

      DosIdeasQUnitResultado.jpg

      Asserts

      Qunit nos provee de una serie de asserts para nuestros test. En el ejemplo anterior se hace mención de ok y equal. A continuación vamos a dar más detalle de los mismos y de nuevos.

      ok: Es para validar resultado booleanos (es el equivalente a assertTrue de JUnit).

      La sintaxis es la siguiente: ok(estado, mensaje).

      estado: es una expresión booleana a evaluar.

      mensaje: es el mensaje a mostrar cuando finaliza el assert.

      Ejemplo: ok(validarImporte("1112"),'El importe es 1112');

      equal: Valida que el resultado obtenido es igual al esperado (es similiar al assertEqual de JUnit).

      La sintaxis es la siguiente: equal(actual, esperado, mensaje)

      actual: es el objeto a evaluar.

      esperado: es el resultado esperado.

      mensaje: es el mensaje a mostrar cuando finaliza el assert.

      Ejemplo: equal(extraerSubCadena("dosIdeas",3,5),'Ideas');


      Integracion continua con Jenkins

      Qunit-test-runner (QTR) es un proyecto que te permite integrar tus test de QUnit mediante una simple tarea ant.

      QTR provee un entorno de JavaScript dentro de una JVM para la ejecucion de los test de QUnit y el reporte de los resultados en un formato JUnit XML standard. Por lo tanto, QTR permite una fácil integracion con los sistemas de CI (Integracion Continua) como Jenkins/Hudson, dando visibilidad inmediata de los test de QUnit junto a los test de JUnit.



      • Generar un <nombre del Test>Recipe.js con la funcion loadFiles utilizada por QTR.

      Ejemplo: pagoConTarjetaTestRecipe.js

      loadFiles([
        "../../siteApache/home/js/jquery-1.3.2.js",
        "../../siteApache/home/js/validate.js",  
        "../../siteApache/home/js/pagoConTarjeta.js",
        "pagoConTarjetaTest.js"
      ])
      


      • Agregar las siguientes tareas ant al build.xml del proyecto.

      <target name="qunit" depends="init">

         <path id="qunit-test-runner.path">
             <fileset dir="${basedir}">
                 <include name="${file.reference.qunit-test-runner-0.0.1-SNAPSHOT-jar-with-dependencies.jar}" />
             </fileset>
         </path>
         <taskdef classpathref="qunit-test-runner.path" resource="tasks.properties"/>
      

      </target>

      <target name="report-jstest-pnt" depends="qunit">

         <mkdir dir="${report.dir}" />
         <qunit basedirectory="${basedir}/${test.javascript.dir}"
              reportdirectory="${report.dir}">
         </qunit>
             
         <mkdir dir="${report.dir}/html" />
         <junitreport todir="${report.dir}/html">
            <fileset dir="${report.dir}">
                 <include name="TEST-qunit-*.xml"/>
             </fileset>
             <report format="frames" todir="${report.dir}/html"/>
         </junitreport>
      

      </target>


      • Activar en el proyecto de Jenkins, la opcion publish HTML reports y apuntar al directorio donde se generan los reportes HTML a la pagina index.html


      Ver también

      Página de QUnit Página de QTR (proyecto Qunit-test-runner)