Карма - браузерный тестовый бегун.
Идея заключается в том, что в браузерах изначально отсутствует концепция загрузки тестовых файлов, их запуска и составления отчетов о результатах. Что карма делает (примерно):
- запуск небольшого веб-сервера для обслуживания javascript-файлов "на стороне клиента" (1)
- также обслуживайте "клиентские" файлы JavaScript с помощью тестов (или спецификаций, как их часто называют) (2)
- обслуживать пользовательскую веб-страницу, которая будет запускать код JavaScript для тестов (3)
- запустить браузер для загрузки этой страницы (4)
- сообщить результаты теста на сервер (5)
- Карма может затем снова сообщать о результатах в текстовые файлы, консоль, все, что нравится вашему CI-серверу и т. д ...
Глядя на каждую часть:
(1) Эти файлы будут вашими настоящими js-файлами; Вы скажете карме, как их загрузить. Если вы используете requirejs, есть плагин karma и необходим некоторый конфиг.
(2) Эти тесты могут быть написаны на различных платформах тестирования Javascript (Jasmine, QUnit, Mocha); это код JS, который запускается в браузере.
(3) Пользовательская веб-страница будет немного отличаться для каждой среды тестирования; Вот почему у кармы есть плагины для разных фреймворков.
(4) Карма может запускать страницу во многих браузерах (FF, Chrome или безголовых браузерах, таких как PhantomJs.)
(5) Отчетность перед кармой, опять же, зависит от фреймворка и касается плагинов кармы.
Итак, чтобы ответить на ваши вопросы:
- в Java большинство людей используют JUnit, который одновременно является средой для написания тестов и их запуска, но у него нет проблемы разграничения среды, в которой выполняются тесты, и среды, в которой агрегируются отчеты о тестах; Карма была бы отсутствующей частью между JUnit Suite и JUnit TestRunner
- Да, вы можете делать все, что карма делает «вручную» - выбрать один каркас (жасмин, квит, мокко) и следовать инструкциям. Преимущество кармы в том, что она обеспечивает готовое решение, если вы находитесь в стандартной настройке.
- Карму можно использовать как для модульного теста (с jasmine / qunit / what), так и для интеграционных тестов (в которых для управления браузером будет использоваться другой API, например, webdriver)