Karma vs framework de prueba Jasmine, Mocha, QUnit [cerrado]

258

Pocas preguntas:

  • ¿Cómo se relacionan el Karma y el framework de prueba X (Jasmine, Mocha, QUnit)?
  • ¿Cuál es el marco equivalente en el mundo Java? Supongo que Jasmine, Mocha, QUnit es igual a jUnit / TestNG. ¿Qué tal Karma?
  • ¿Puedo ejecutar el framework de prueba X (por ejemplo, Jasmine) sin Karma?
  • ¿Karma es para prueba de unidad o prueba de integración / e2e? Esta referencia muestra es para prueba unitaria, sin embargo, esto es para prueba e2e.
Lee Chee Kiam
fuente
Ejecutamos

Respuestas:

419

Karma es un corredor de prueba de navegador.

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

  • iniciar un pequeño servidor web para servir 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 suele llamar) (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)
  • informar 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á 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; Es por eso 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, nuevamente, dependiente del marco, y se trata con complementos de karma.

Entonces para responder a sus preguntas:

  • en Java, la mayoría de las personas usan JUnit, que es un marco para escribir pruebas y ejecutarlas, pero no tiene el problema de diferenciar el entorno en el que se ejecutan las pruebas y en el que se agregan los informes de prueba; el karma sería la pieza que faltaba entre un JUnit Suite y un 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 unitarias (con jazmín / qunit / lo que sea) como para pruebas de integración (que usarán otra API, como webdriver, para controlar el navegador)
phtrivier
fuente
59
Esto merece una publicación de blog o algo así.
Willa
Karma puede iniciar la página en muchos navegadores (FF, Chrome o navegadores sin cabeza como PhantomJs). Entonces Jasmine no? podemos probarlo en muchos marcos y elegir esa configuración en conf js
Wang'l Pakhrin
1
@ Wang'lPakhrin Por supuesto, puede usar jazmín con (m) cualquier navegador. Lo que quise decir es que, técnicamente, el karma puede iniciar (m) cualquier navegador en el que quieras probar. Al momento de escribir, jazmín no era responsable de iniciar los navegadores (todavía no creo que lo haga). ¡Espero que aclare las cosas!
phtrivier
thejsguy.com/2015/01/12/jasmine-vs-mocha-chai-and-sinon.html "Jasmine vs. Mocha, Chai y Sinon"
escapó el
1
@Willa He hecho un video de YouTube basado en esta respuesta youtube.com/watch?v=bJc078szrZA :)
bersling el
70

Una forma más corta de entender la diferencia:

Las personas que prueban con Jasmine / Mocha simple probablemente ejecutan todo el código con la máquina virtual Node.

Agregar Karma a la mezcla (además de su marco de elección actual) ejecutará su conjunto de pruebas 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 de shell)

Frank sistemático
fuente
34

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

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

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

En resumen, ¿quizás la pregunta debería ser Karma Y Jasmine o Mocha o QUnit?

mauricio777
fuente
2
¿Podría un pequeño resumen, desde el enlace. Eso mejora su respuesta
winner_joiner
1
¿Puede el karma ejecutar pruebas de Jest?
SuperUberDuper
también puedes ver en Jasmine? Creo que sí, pero no lo recuerdo tranquilamente.
Wang'l Pakhrin
@ Wang'l Pakhrin No sé si Jasmine tiene una funcionalidad de reloj, solo uso nodemon. "nodemon --exec jasmine" y cada vez que guarde un archivo ejecutará las pruebas.
snowfrogdev
La tesis no menciona a Jasmine.
Carl G