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)