Karma adalah pelari uji browser.
Idenya adalah bahwa browser tidak memiliki konsep memuat file tes, menjalankannya, dan melaporkan hasil. Apa yang dilakukan karma adalah (secara kasar):
- memulai server web kecil untuk melayani file javascript "sisi klien" yang akan diuji (1)
- juga melayani file javascript "sisi klien" dengan tes (atau Spesifikasi, sebagaimana sering disebut) (2)
- melayani halaman web khusus yang akan menjalankan kode javascript untuk pengujian (3)
- mulai browser untuk memuat halaman ini (4)
- melaporkan hasil tes ke server (5)
- karma kemudian dapat melaporkan hasilnya ke file teks, konsol, apa pun yang disukai server CI Anda, dll ...
Melihat setiap bagian:
(1) File-file itu akan menjadi file js Anda yang sebenarnya; Anda akan memberi tahu karma cara memuatnya. Jika Anda menggunakan requirejs, ada plugin karma, dan beberapa konfigurasi diperlukan.
(2) Tes-tes tersebut dapat ditulis dalam berbagai kerangka pengujian Javascript (Jasmine, QUnit, Mocha); ini adalah kode JS yang dijalankan di browser.
(3) Halaman web khusus akan sedikit berbeda untuk setiap kerangka kerja pengujian; inilah sebabnya karma memiliki plugin untuk kerangka kerja yang berbeda.
(4) Karma dapat meluncurkan halaman di banyak browser (FF, Chrome, atau browser tanpa kepala seperti PhantomJs.)
(5) Pelaporan ke karma, sekali lagi, bergantung pada kerangka kerja, dan ditangani dengan plugin karma.
Jadi untuk menjawab pertanyaan Anda:
- di Jawa, kebanyakan orang menggunakan JUnit yang merupakan kerangka kerja untuk menulis tes dan menjalankannya, tetapi tidak memiliki masalah membedakan lingkungan di mana tes dijalankan dan yang di mana laporan tes dikumpulkan; karma akan menjadi bagian yang hilang antara JUnit Suite dan JUnit TestRunner
- Ya, Anda dapat melakukan semua yang dilakukan karma "dengan tangan" - pilih satu kerangka kerja (melati, qunit, moka) dan ikuti instruksi. Keuntungan dari karma adalah ia memberikan solusi out-of-the-box, jika Anda dalam pengaturan standar.
- Karma dapat digunakan untuk uji unit (dengan melati / qunit / apa pun) dan tes integrasi (yang akan menggunakan API lain, seperti webdriver, untuk menggerakkan browser)