unit - Herramientas de prueba de unidad de JavaScript para TDD
test javascript mocha (13)
He examinado y considerado muchas pruebas unitarias de JavaScript y herramientas de prueba, pero no he podido encontrar una opción adecuada para seguir siendo totalmente compatible con TDD. Entonces, ¿hay una herramienta de prueba de unidad de JavaScript que sea totalmente compatible con TDD?
BusterJS
También está Buster.js de Christian Johansen, el autor de Test Driven Javascript Development y el marco Sinon. Desde el sitio:
Buster.JS es un nuevo marco de prueba de JavaScript. Realiza pruebas de navegador al automatizar las ejecuciones de prueba en navegadores reales (piense en JsTestDriver), así como en las pruebas de Node.js.
Karma o Protractor
Karma es un corredor de pruebas de JavaScript creado con Node.js y destinado a pruebas de unidad.
El transportador es para pruebas de extremo a extremo y utiliza Selenium Web Driver para realizar pruebas.
Ambos han sido realizados por el equipo angular. Puedes usar cualquier biblioteca de aserciones que quieras con cualquiera de los dos.
Screencast: Karma Empezando
relacionado :
- ¿Debo usar Protractor o Karma para mis pruebas de extremo a extremo?
- ¿Pueden usarse Protractor y Karma juntos?
pros :
- Utiliza node.js, tan compatible con Win / OS X / Linux
- Ejecutar pruebas desde el navegador o sin cabeza con PhantomJS
- Ejecutar en varios clientes a la vez
- Opción para iniciar, capturar, y apagar automáticamente los navegadores.
- Opción para ejecutar el servidor / clientes en la computadora de desarrollo o por separado
- Ejecutar pruebas desde la línea de comandos (se puede integrar en ant / maven)
- Escribir pruebas de estilo xUnit o BDD.
- Soporta múltiples marcos de prueba de JavaScript
- Pruebas de ejecución automática en guardar
- Proxies solicita dominio cruzado
- Posible personalizar:
- Amplíelo para envolver otros marcos de prueba (Jasmine, Mocha, QUnit integrado)
- Sus propias afirmaciones / refutaciones.
- Reporteros
- Lanzadores del navegador
- Plugin para WebStorm
- Compatible con Netbeans IDE
Contras :
- No admite la prueba NodeJS (es decir, backend)
- No hay plugin para Eclipse (todavía)
- No hay historial de resultados de pruebas anteriores
mocha.js
No estoy totalmente calificado para comentar las características, fortalezas y debilidades de mocha.js, pero alguien en quien confío en la comunidad de JS me lo recomendó.
Lista de características, según lo informado por su sitio web:
- soporte del navegador
- Soporte simple asíncrono, incluyendo promesas.
- informes de cobertura de prueba
- cadena de soporte diff
- javascript # API para ejecutar pruebas
- Estado de salida adecuado para soporte de CI, etc.
- Detecta automáticamente y desactiva la coloración para no-ttys
- mapea excepciones no detectadas al caso de prueba correcto
- prueba de tiempo de espera asíncrono
- tiempos de espera específicos de la prueba
- soporte de notificación de gruñido
- informes de duraciones de prueba
- destaca pruebas lentas
- soporte para el observador de archivos
- detección de fugas de variable global
- Opcionalmente, ejecute pruebas que coincidan con una expresión regular.
- Auto-exit para evitar "colgar" con un bucle activo
- Fácilmente meta-generar suites y casos de prueba
- Soporte de archivos mocha.opts
- Títulos de suite seleccionables para filtrar la ejecución de la prueba
- soporte de depurador de nodo
- detecta múltiples llamadas a hecho ()
- Utilice cualquier biblioteca de aserción que desee
- Informes extensibles, agrupados con más de 9 reporteros
- Pruebas extensibles DSL o "interfaces"
- antes, después, antes de cada uno, después de cada gancho
- soporte de transpiler arbitrario (café-script, etc.)
- Paquete TextMate
yolpo
Esto ya no existe, redirige a sequential.js en su lugar
Yolpo es una herramienta para visualizar la ejecución de javascript. Se recomienda a los desarrolladores de API de Javascript que escriban sus casos de uso para mostrar y decir su API. Tales casos de uso forman la base de las pruebas de regresión.
AVA
Corredor de pruebas futurista con soporte incorporado para ES2015. A pesar de que JavaScript es de un solo hilo, IO en Node.js puede ocurrir en paralelo debido a su naturaleza asíncrona. AVA aprovecha esto y ejecuta sus pruebas simultáneamente, lo que es especialmente beneficioso para las pruebas pesadas de IO. Además, los archivos de prueba se ejecutan en paralelo como procesos separados, lo que le brinda un mejor rendimiento y un entorno aislado para cada archivo de prueba.
- Minimal y rapido
- Sintaxis de prueba simple
- Ejecuta pruebas concurrentemente
- Exige la escritura de pruebas atómicas.
- No hay globales implícitos
- Entorno aislado para cada archivo de prueba.
- Escribe tus pruebas en ES2015
- Apoyo prometido
- Apoyo de la función del generador
- Soporte de función asíncrona
- Apoyo observable
- Afirmaciones mejoradas
- TAP opcional o utput
- Rastros de pila limpios
Buster.js
Un test-runner de JavaScript construido con Node.js. Muy modular y flexible. Viene con su propia biblioteca de aserciones, pero puede agregar la suya propia si lo desea. La biblioteca de aserciones está desacoplada, por lo que también puede usarla con otros corredores de prueba. En lugar de usar assert(!...)
o expect(...).not...
, usa refute(...)
cual es un buen giro.
Un kit de herramientas de prueba de JavaScript del navegador. Realiza pruebas de navegador con automatización de navegador (piense en JsTestDriver), pruebas de páginas HTML estáticas de estilo qunit, pruebas en navegadores sin cabeza (phantomjs, jsdom, ...), y más. ¡Echa un vistazo a la visión general !
Un kit de herramientas de prueba Node.js. Obtiene la misma biblioteca de casos de prueba, biblioteca de aserciones, etc. Esto también es ideal para el navegador híbrido y el código Node.js. Escriba su caso de prueba con Buster.JS y ejecútelo en Node.js y en un navegador real.
Screencast: Buster.js Comenzando (2:45)
pros :
- Utiliza node.js, tan compatible con Win / OS X / Linux
- Ejecute pruebas desde el navegador o sin cabeza con PhantomJS (pronto)
- Ejecutar en varios clientes a la vez
- Soporta pruebas de NodeJS
- No es necesario ejecutar el servidor / clientes en la computadora de desarrollo (no es necesario para IE)
- Ejecutar pruebas desde la línea de comandos (se puede integrar en ant / maven)
- Escribir pruebas de estilo xUnit o BDD.
- Soporta múltiples marcos de prueba de JavaScript
- Aplazar las pruebas en lugar de comentarlas
- SinonJS construido en
- Pruebas de ejecución automática en guardar
- Proxies solicita dominio cruzado
- Posible personalizar:
- Amplíelo para envolver otros marcos de prueba (JsTestDriver incorporado)
- Sus propias afirmaciones / refutaciones.
- Reporteros (xunit XML, puntos tradicionales, especificación, tap, teamcity y más integrados)
- Personalice / reemplace el HTML que se utiliza para ejecutar las pruebas del navegador
- Integración de TextMate y Emacs
Contras :
- Stil en beta por lo que puede ser buggy
- No hay plugin para Eclipse / IntelliJ (todavía)
- No agrupa los resultados por os / browser / version como TestSwarm *. Sin embargo, sí imprime el nombre y la versión del navegador en los resultados de la prueba.
- No hay historial de resultados de pruebas anteriores como TestSwarm *
- No funciona completamente en Windows a partir de mayo de 2014
* TestSwarm también es un servidor de integración continua, mientras que usted necesita un servidor de CI separado para Buster.js. Sin embargo, genera informes xUnit XML, por lo que debería ser fácil de integrar con Hudson , Bamboo u otros servidores de CI.
TestSwarm
https://github.com/jquery/testswarm
TestSwarm ya no se encuentra en desarrollo activo como se indica en su página web de GitHub. Recomiendan el karma, el navegador de navegador, o el pasante.
Jasmine
Este es un corredor de pruebas del lado del cliente que podría interesar a los desarrolladores familiarizados con Ruby o Ruby on Rails. La sintaxis se basa en RSpec que se utiliza para probar en proyectos de Rails.
Jasmine es un marco de desarrollo basado en el comportamiento para probar tu código JavaScript. No depende de ningún otro framework de JavaScript. No requiere un DOM.
Si tiene experiencia con este corredor de prueba, contribuya con más información :)
Proyecto casa: Jasmine
QUnit
QUnit se centra en probar JavaScript en el navegador y, al mismo tiempo, brinda la mayor comodidad posible al desarrollador. Blurb del sitio:
QUnit es un conjunto de prueba de unidades de JavaScript potente y fácil de usar. Es utilizado por los proyectos jQuery, jQuery UI y jQuery Mobile y es capaz de probar cualquier código JavaScript genérico.
QUnit comparte algo de historia con TestSwarm (arriba):
QUnit fue desarrollado originalmente por John Resig como parte de jQuery. En 2008, obtuvo su propia documentación de inicio, nombre y API, lo que permite que otros también la utilicen para sus pruebas de unidad. En el momento todavía dependía de jQuery. Una revisión en 2009 solucionó eso, ahora QUnit se ejecuta completamente independiente. Los métodos de afirmación de QUnit siguen la especificación CommonJS Unit Testing, que hasta cierto punto fue influenciada por QUnit.
Sinon
Otra gran herramienta es sinon.js por Christian Johansen, el autor de Test-Driven JavaScript Development . Mejor descrito por él mismo:
Prueba independiente de espías, colillas y simulacros para JavaScript. Ninguna dependencia trabaja con cualquier marco de prueba de unidad.
Interno
El sitio web de Intern proporciona una comparación directa de características con los otros marcos de prueba en esta lista. Ofrece más funciones listas para usar que cualquier otro sistema de prueba basado en JavaScript.
JEST
Un marco de prueba nuevo pero muy poderoso. Permite las pruebas basadas en instantáneas, lo que aumenta la velocidad de las pruebas y crea una nueva dinámica en términos de pruebas.
Echa un vistazo a una de sus charlas: https://www.youtube.com/watch?v=cAKYQpTC7MA
Mejor aún: Empezando
Chutzpah - Un corredor de prueba de JavaScript
Creé un proyecto de código abierto llamado Chutzpah, que es un corredor de prueba para las pruebas unitarias de JavaScript. Chutzpah le permite ejecutar pruebas unitarias de JavaScript desde la línea de comandos y desde dentro de Visual Studio. También es compatible con la ejecución en el servidor de integración continua de TeamCity.
google-js-test:
Marco de prueba de JavaScript lanzado por Google: https://github.com/google/gjstest
- Prueba extremadamente rápida de inicio y tiempo de ejecución, sin tener que ejecutar un navegador.
- Salida limpia y legible en el caso de pruebas que pasan y fallan.
- Un corredor de pruebas basado en el navegador que se puede actualizar cada vez que se cambia JS.
- Estilo y semántica que se parecen a Google Test para C ++.
- Un marco de
$tearDown
$verifyAll
que requiere un código de repetición mínimo (por ejemplo, no$tearDown
o$verifyAll
) con estilo y semántica basados en el marco de$verifyAll
Google C ++ .
Actualmente no hay binarios para Windows
Agregamos la integración de JUnit a nuestro generador de código Java a Javascript ST-JS ( http://st-js.org ). El marco genera el Javascript correspondiente para el código probado y las pruebas unitarias y envía el código a diferentes navegadores.
No hay necesidad de un servidor separado ya que el corredor de prueba de la unidad abre el puerto http necesario (y lo cierra una vez que finalizan las pruebas). El marco manipula el seguimiento de apilamiento de Java para que las aserciones fallidas se muestren correctamente con el complemento JUnit Eclipse. Aquí hay un ejemplo simple con jQuery y Mockjax:
@RunWith(STJSTestDriverRunner.class)
@HTMLFixture("<div id=''fortune''></div>")
@Scripts({ "classpath://jquery.js",
"classpath://jquery.mockjax.js", "classpath://json2.js" })
public class MockjaxExampleTest {
@Test
public void myTest() {
$.ajaxSetup($map("async", false));
$.mockjax(new MockjaxOptions() {
{
url = "/restful/fortune";
responseText = new Fortune() {
{
status = "success";
fortune = "Are you a turtle?";
}
};
}
});
$.getJSON("/restful/fortune", null, new Callback3<Fortune, String, JQueryXHR>() {
@Override
public void $invoke(Fortune response, String p2, JQueryXHR p3) {
if (response.status.equals("success")) {
$("#fortune").html("Your fortune is: " + response.fortune);
} else {
$("#fortune").html("Things do not look good, no fortune was told");
}
}
});
assertEquals("Your fortune is: Are you a turtle?", $("#fortune").html());
}
private static class Fortune {
public String status;
public String fortune;
}
}
Ahora estamos usando Qunit con Pavlov y JSTestDriver todos juntos. Este enfoque funciona bien para nosotros.
Eche un vistazo al marco de prueba de la unidad Dojo Object Harness (DOH) que es prácticamente un arnés independiente del marco para la prueba de la unidad de JavaScript y no tiene ninguna dependencia de Dojo. Hay una muy buena descripción de ello en las aplicaciones Web 2.0 de Unit Unit que utilizan el arnés del objetivo de Dojo .
Si desea automatizar las pruebas de la interfaz de usuario (un punto doh.robot muchos desarrolladores), consulte doh.robot (actualización temporal: actualización: otro enlace http://dojotoolkit.org/reference-guide/util/dohrobot.html ) y dijit.robotx (temporario abajo) . Este último está diseñado para una prueba de aceptación. Actualizar:
Los artículos a los que se hace referencia explican cómo usarlos, cómo emular a un usuario que interactúa con su interfaz de usuario con el mouse y / o el teclado, y cómo grabar una sesión de prueba, para que pueda "jugar" más tarde automáticamente.
La sección de JavaScript de la entrada de Wikipedia, List of Unit Testing Frameworks , proporciona una lista de las opciones disponibles. Indica si funcionan del lado del cliente, del lado del servidor o de ambos.
También podría interesarle el marco de prueba de unidades que forma parte de qooxdoo , un marco de RIA de código abierto similar a Dojo, ExtJS, etc. pero con una cadena de herramientas bastante completa.
Pruebe la versión en línea del testrunner . Consejo: presiona la flecha gris en la parte superior izquierda (debería ser más obvio). Es un botón de "jugar" que ejecuta las pruebas seleccionadas.
Para obtener más información sobre las clases JS que le permiten definir sus pruebas unitarias, consulte el visor de API en línea.
Para realizar pruebas automáticas de UI (basadas en Selenium RC), revise el proyecto Simulator .
Tiene "se ejecuta en el navegador real" como un profesional, pero en mi experiencia eso es una estafa porque es lento. Pero lo que lo hace valioso es la falta de emulación JS suficiente de las alternativas que no son del navegador. Podría ser que si su JS es lo suficientemente complejo como para que solo sea suficiente una prueba en el navegador, pero hay un par de opciones más a considerar:
HtmlUnit : "Tiene un soporte de JavaScript bastante bueno (que está mejorando constantemente) y puede funcionar incluso con bibliotecas AJAX bastante complejas, simulando Firefox o Internet Explorer según la configuración que desee usar". Si su emulación es lo suficientemente buena para su uso, será mucho más rápida que manejar un navegador.
Pero quizás HtmlUnit tenga soporte JS lo suficientemente bueno pero ¿no te gusta Java? Entonces tal vez:
Celerity : la API de Watir se ejecuta en JRuby respaldada por HtmlUnit.
o similarmente
Schnell : otro envoltorio JRuby de HtmlUnit.
Por supuesto, si HtmlUnit no es lo suficientemente bueno y tiene que conducir un navegador, entonces podría considerar a Watir para conducir su JS .
YUI también tiene un marco de prueba . Este video de Yahoo! El teatro es una buena introducción, aunque hay muchos aspectos básicos sobre TDD por adelantado.
Este marco es genérico y se puede ejecutar en cualquier biblioteca de JavaScript o JS.
MochiKit tiene un marco de prueba llamado SimpleTest que parece haber tenido éxito. Aquí hay una entrada de blog del autor original .