test nodejs example async javascript unit-testing integration-testing

javascript - nodejs - mocha test example



Karma vs framework de prueba Jasmine, Mocha, QUnit (3)

Karma es un corredor de prueba del navegador.

La idea es que los navegadores no tienen de forma nativa el concepto de cargar archivos de prueba, ejecutarlos e informar resultados. Lo que hace el karma es (aproximadamente):

  • iniciar un pequeño servidor web para servir los archivos javascript del "lado del cliente" que se probarán (1)
  • también sirve los archivos javascript "del lado del cliente" con las pruebas (o especificaciones, como se les llama a menudo) (2)
  • Servir una página web personalizada que ejecutará código javascript para las pruebas (3)
  • iniciar un navegador para cargar esta página (4)
  • reportar los resultados de la prueba al servidor (5)
  • El karma puede volver a informar los resultados a los archivos de texto, la consola, cualquier cosa que le guste a su servidor de CI, etc.

Mirando cada parte:

(1) Esos archivos serán sus archivos js reales; Le dirás al karma cómo cargarlos. Si usa requirejs, hay un complemento de karma y se necesita algo de configuración.

(2) Esas pruebas se pueden escribir en una variedad de marcos de prueba de Javascript (Jasmine, QUnit, Mocha); Este es el código JS que se ejecuta en el navegador.

(3) La página web personalizada será un poco diferente para cada marco de prueba; Esta es la razón por la que el karma tiene complementos para diferentes marcos.

(4) Karma puede iniciar la página en muchos navegadores (FF, Chrome o navegadores sin cabeza como PhantomJs).

(5) Informar al karma es, de nuevo, dependiente del marco, y se trata de complementos de karma.

Así que para responder a sus preguntas:

  • en Java, la mayoría de las personas utilizan JUnit, que es tanto un marco para escribir pruebas como para ejecutarlas, pero no tiene el problema de diferenciar el entorno en el que se ejecutan las pruebas y el único en el que se agregan los informes de prueba; karma sería la pieza que falta entre JUnit Suite y JUnit TestRunner
  • Sí, puedes hacer todo lo que el karma hace "a mano": elige un marco (jazmín, qunit, mocha) y sigue las instrucciones. La ventaja del karma es que proporciona una solución lista para usar, si está en una configuración estándar.
  • Karma se puede usar tanto para pruebas de unidad (con jazmín / qunit / lo que sea) como para pruebas de integración (que usarán otra API, como webdriver, para manejar el navegador)

Pocas preguntas:

  • ¿Cómo se relacionan el karma y el marco de prueba X (Jasmine, Mocha, QUnit) entre sí?
  • ¿Cuál es el marco equivalente en el mundo de Java? Supongo que Jasmine, Mocha, QUnit es igual a jUnit / TestNG. ¿Qué tal Karma?
  • ¿Puedo ejecutar el framework de pruebas X (por ejemplo, Jasmine) sin Karma?
  • ¿Karma es para prueba unitaria o integración / prueba e2e? Esta reference muestra que es para la prueba unitaria, sin embargo, this dicho es para la prueba e2e.

La tesis del chico que diseñó el Karma fue muy informativa al describir las soluciones existentes y compararlas, y por supuesto al Karma mismo.

https://github.com/karma-runner/karma/blob/master/thesis.pdf

Resumen: Karma es un corredor de prueba. Puede ser utilizado por QUnit, Jasmine, Mocha, ... Karma tiene ventajas para otros corredores de pruebas para mejorar su ciclo de desarrollo TDD / BDD. "Mira" los archivos, de modo que cuando guarda un cambio, Karma ejecuta las pruebas e informa al instante, sin cambiar el contexto al navegador web para ejecutar la prueba.

En resumen, tal vez la pregunta debería ser Karma Y Jasmine o Mocha o QUnit?


Una forma más corta de entender la diferencia:

La gente que realiza pruebas con Jasmine / Mocha simple probablemente ejecuta todo el código con la máquina virtual Node.

Al agregar Karma a la mezcla (en la parte superior del marco de su elección), se ejecutará su suite de prueba con el motor de otros navegadores.

Al hacer esto, obtienes los pequeños extras que obtienes con un entorno de navegador. Será más fácil probar el código relacionado con DOM, pero también estará renunciando a los recursos adicionales proporcionados por el motor Node (como el sistema de archivos / acceso al shell)