Pregunta

Mi marco JavaScript principal es jQuery , por lo que me gustaría que mi prueba unitaria y los marcos de prueba sean compatibles con eso. Prefiero no tener que introducir otro marco de JavaScript.

Actualmente estoy usando QUnit para pruebas unitarias y Jack por burlarse, pero soy bastante nuevo en las pruebas unitarias de JavaScript.

¿Alguien más tiene una mejor herramienta para sugerir? ¿Qué ha funcionado para usted?

¿Fue útil?

Solución

QUnit
jQUnit
Escritura de pruebas JS con QUnit y jQUnit

QUnit es el marco de prueba de unidad para el marco jQuery JavaScript. El marco de prueba en sí usa la biblioteca jQuery, pero las pruebas se pueden escribir para cualquier JavaScript y no requieren el código para usar jQuery. JQUnit es una versión modificada de QUnit que agrega funciones de configuración, desmontaje y afirmación que son más típicas de un marco xUnit y encapsula todo en una variable global.

La interfaz visual de la página testrunner es agradable, ya que le permite profundizar y ver cada afirmación en cada método de prueba. Escribir pruebas es bastante fácil, y puede ejecutar el código de prueba directamente en la página testRunner [8]. Esto permite pruebas DOM fáciles y visibles.

QUnit: MIT o GPL (elegir) jQUnit: Licencia MIT

Profesionales
  - Soporte asincrónico
  - Bueno para pruebas DOM
  - Las pruebas siempre se ejecutan secuencialmente en el orden en que se agregan a una suite
  - Depuración en la página de prueba usando firebug
  - La sintaxis es similar a JUnit si se usa JQUnit, pero es fácil de aprender si se usa QUnit
Contras
  - La automatización sería difícil de implementar

Otros consejos

Creo que Jack es el mejor marco de burla para JavaScript en el momento de escribir este artículo. La razón principal es que lo que es correcto para JavaScript no es lo que es correcto para un lenguaje fuertemente tipado como Java.

Muchos frameworks de simulación de JavaScript están inspirados en frameworks simulados de Java (como el excelente JsMockito, por ejemplo). Pero el problema con estos es que requieren inyección de dependencia, porque esa es la única forma razonable de usar burlas en Java. Pero en JavaScript, hay MUCHAS formas de usar la burla, y no está obligado a usar la inyección de dependencia en todas partes.

Por ejemplo, con JsMockito, debe hacer simulacros y luego pasar esos simulacros a su software bajo prueba (SUT). El SUT tiene que llamar directamente a los simulacros. Por lo tanto, está obligado a codificar el SUT como un constructor o una función que tiene en cuenta todas sus dependencias como parámetros. (A veces, esa es una buena manera de implementarlo, pero no en todos los casos. La cola está moviendo al perro si el diseño de su marco burlón obliga a su enfoque de implementación).

En JavaScript, es muy fácil "secuestrar" cualquier función Por lo tanto, hay muchas formas de construir algo de manera que pueda burlarse de partes sin inyectar explícitamente sus dependencias. Por ejemplo, Jack le permite burlarse de la función any , ya sea pública o en un objeto local. Desde allí puede espiarlo, tropezarlo o expresar expectativas al respecto. El punto clave es este: una vez que se ha burlado de una función, CUALQUIER llamada a esa función original se dirigirá a su simulación . En otras palabras, sus simulacros se seguirán utilizando aunque se haya llamado a la función original no simulada. Como resultado, no está obligado a inyectar dependencias, aunque ciertamente puede hacerlo en los casos que lo requieran.

JavaScript es un lenguaje diferente al de Java (y C #, etc.) Permite diferentes modismos de implementación. La inyección de dependencia sigue siendo una herramienta valiosa en la caja de herramientas en JavaScript, pero ya no es el único juego en la ciudad. Su marco de burla necesita conocer y respetar ese hecho. Jack y un par de otros lo hacen, pero de los que lo hacen, Jack parece ser el más maduro y rico en características.

No estoy seguro de por qué nadie ha mencionado JsTestDriver . Tiene que ser una de las únicas herramientas de prueba de JS que realmente funcionan como cabría esperar si hubiera utilizado herramientas de prueba de unidad en otros idiomas.

Se pueden ejecutar pruebas sin tocar un navegador, puede integrarlo con IDE, puede integrarlo con sistemas de integración continua ... Ah, y es rápido, y puede ejecutar pruebas en múltiples navegadores al mismo tiempo.

También puede usar otros marcos de prueba como YUITest con él, lo que lo hace aún mejor.

Prueba YUI
TDD con prueba YUI

YUI Test es el marco de prueba para la biblioteca de interfaz de usuario de Yahoo. Yahoo lo utiliza para probar su propia biblioteca y tiene una sintaxis similar a la de jUnit.

Al igual que jsUnit, YUI Test viene con su propia consola de registro que puede generar información, advertencias y errores además de los resultados de cada prueba.

YUI también proporciona la capacidad de enviar informes sobre los resultados en formato JSON o XML.

La prueba YUI tiene licencia BSD.

Profesionales
  - Muy buena documentación
  - Comunidad activa
  - Lanzamientos regulares
  - La sintaxis es similar a jUnit (conjuntos de pruebas, afirmaciones y configuración / desmontaje)
  - Soporte asincrónico
  - Bueno para pruebas DOM
  - Las pruebas siempre se ejecutan secuencialmente en el orden en que se agregan a una suite

Contras
  - Automatización no trivial de implementar, pero menos difícil que otros marcos

También echa un vistazo http://sinonjs.org/

  

Espías de prueba Trozos de prueba Simulacros Temporizadores falsos XHR falsos Afirmaciones de sandboxing de servidores falsos

Funciona junto con qUnit y eso ha sido una ventaja hasta ahora.

Esta es una muy buena revisión de los marcos de simulación disponibles para Javascript:

http://testdrivenwebsites.com/2010/05/ 06 / java-script-simulacro-frameworks-comparación

Hemos estado usando jsspec jsspec . Es muy agradable si te gusta rspec y BDD. Acabo de ver un artículo de Justin Gehtland sobre su uso " sin cabeza " también.

Para burlarse de JavaScript, eche un vistazo a qMock , un marco que un colega y yo escribimos para complementar nuestro uso de QUnit. Aunque este último es ideal para pruebas unitarias, no permite pruebas asincrónicas / lógicas comerciales muy efectivas. No hemos "etiquetado" ninguna versión como estable, pero hay algunos documentos decentes allí, y si revisa el svn verá que qmock tiene pruebas unitarias detrás de él que son bastante explicativas.

Ah, y para automatizar las pruebas como parte de la compilación, utilizamos un simple script de selenio para navegar a través de nuestra suite de prueba (una página de prueba por archivo JS) y 'escuchamos' una clase CSS aprobada o reprobada (agregada por QUnit) . Esto también funciona sin cabeza para IE / FF2 AFAIK

Para el desarrollo de mozilla, me enamoro de UXU , basado en MozUnit pero aún activo. Tiene buenas características como servidor simulado o métodos de suspensión / rendimiento.

Utilizo el marco de prueba de Screw Unit y he escrito mi propia burlona biblioteca llamada jsMocha que ha estado en uso intensivo en la empresa en la que trabajo durante más de 6 meses.

Sé que está pidiendo marcos compatibles con JQuery, pero quiero lanzar script.aculo.us en la mezcla para completar. Tienen una suite de pruebas que no está mal.

CrossCheck parecía extremadamente poderoso cuando lo miraba, pero no lo hemos incorporado a nuestro proceso de construcción en este momento. Tiene la ventaja de no tener navegador y, por lo tanto, debería funcionar bien en un escenario de compilación y prueba automatizado.

http://thefrontside.net/crosscheck

Puede probar HtmlUnit que tenía un Versión compatible con JQuery hace más de un año.

La ventaja de HtmlUnit es que no está manejando un navegador, por lo que es RÁPIDO.

La desventaja es que no está manejando un navegador, por lo que hay algunas cosas de JS que no funcionarán. Pero compensando que puedan ejecutar las pruebas de JQuery, por lo que el soporte de JS podría ser lo suficientemente bueno para lo que necesita.

JsUnit se ejecuta desde el navegador, a través de su complemento Eclipse o automáticamente a través de un Tarea ANT. Crea una página HTML con un montón de funciones de prueba, que deben nombrarse con el prefijo "prueba", incluido el archivo JS que está probando. Cuando falla cualquier afirmación dentro de una función, la función completa falla y deja de ejecutarse. No hay un orden garantizado en el que se ejecuten estas pruebas. Puede crear las funciones setup () y teardown () .

Licencia: GPL, GLPL, MPL

Pros

  • La automatización es relativamente fácil de implementar
  • Mucha funcionalidad
  • La sintaxis es similar a JUnit

Cons

  • No es bueno para las pruebas DOM ya que ejecuta pruebas dentro de un iFrame.
  • No hay garantía de que las pruebas se ejecutarán en el orden en que están escritas.
  • No se puede usar Firebug en la página de testrunner. Necesita tener otra pestaña abierta con el código de prueba real.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top