Карма - тестовий переглядач браузера.
Ідея полягає в тому, що у веб-переглядачах не існує концепції завантаження тестових файлів, їх запуску та звітування про результати. Що робить карма (приблизно):
- запуск невеликого веб-сервера для обслуговування тестових файлів JavaScript на стороні клієнта (1)
- також обслуговувати файли javascript "на стороні клієнта" з тестами (або Specs, як їх часто називають) (2)
- обслуговувати користувацьку веб-сторінку, на якій буде запущений код JavaScript для тестів (3)
- запустити браузер для завантаження цієї сторінки (4)
- повідомити про результати тесту на сервер (5)
- після цього карма може знову повідомляти результати про текстові файли, консоль, все, що подобається вашому серверу CI тощо.
Розглядаючи кожну частину:
(1) ці файли будуть вашими фактичними js-файлами; ви скажете кармі, як їх завантажувати. Якщо ви використовуєте Requjs, є плагін для карми, і потрібна деяка конфігурація.
(2) Ці тести можуть бути складені у різноманітних тестах Javascript (Jasmine, QUnit, Mocha); це JS-код, який запускається у браузері.
(3) Спеціальна веб-сторінка буде дещо різною для кожного тестування; саме тому карма має плагіни для різних рамок.
(4) Карма може запускати сторінку в багатьох браузерах (FF, Chrome або безголових браузерах, як PhantomJs.)
(5) Повідомлення про карму, знову ж таки, залежить від каркасу і стосується плагінів карми.
Отже, щоб відповісти на ваші запитання:
- в Java більшість людей використовують JUnit, який є як основою для написання тестів, так і запускання їх, але у них немає проблеми диференціювати середовище, в якому виконуються тести, і те, в якому зводиться звіт про тести; карма була б відсутнім фрагментом між JUnit Suite та JUnit TestRunner
- Так, ви можете робити все, що робить карма «вручну» - виберіть один каркас (жасмин, квіт, мокка) та дотримуйтесь інструкцій. Перевага карми полягає в тому, що вона пропонує рішення нестандартно, якщо ви перебуваєте у стандартній установці.
- Карма може бути використана як для тестування одиниць (з жасмином / квітами / будь-яким іншим), так і для інтеграційних тестів (які використовуватимуть інший API, наприклад webdriver, для керування браузером)