Karma vs kerangka pengujian Jasmine, Mocha, QUnit [ditutup]

258

Beberapa pertanyaan:

  • Bagaimana Karma dan kerangka kerja pengujian X (Jasmine, Mocha, QUnit) saling berhubungan?
  • Apa kerangka kerja yang setara di dunia Java? Saya menganggap Jasmine, Mocha, QUnit sama dengan jUnit / TestNG. Bagaimana dengan Karma?
  • Bisakah saya menjalankan kerangka pengujian X (misalnya Jasmine) tanpa Karma?
  • Apakah Karma untuk tes unit atau tes integrasi / e2e? Referensi ini menunjukkan untuk uji unit, namun ini dikatakan untuk uji e2e.
Lee Chee Kiam
sumber
Kami menjalankan moka tanpa Karma, tetapi banyak pengembang menggunakan beberapa kerangka kerja pengujian
the_red_baron

Jawaban:

419

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)
phtrivier
sumber
59
Ini layak mendapat posting blog atau semacamnya.
Willa
Karma dapat meluncurkan halaman di banyak browser (FF, Chrome, atau browser tanpa kepala seperti PhantomJs.)? begitu juga Jasmine? kita dapat mengujinya pada banyak kerangka kerja dan memilih pengaturan itu di conf js
Wang'l Pakhrin
1
@ Wang'lPakhrin Anda tentu saja dapat menggunakan melati dengan (m) browser apa pun. Yang saya maksudkan adalah, secara teknis, karma dapat meluncurkan (m) browser apa pun yang ingin Anda uji. Pada saat penulisan, melati tidak bertanggung jawab untuk benar-benar memulai browser (saya masih berpikir tidak.) Berharap itu menjelaskan hal-hal!
phtrivier
thejsguy.com/2015/01/12/jasmine-vs-mocha-chai-and-sinon.html "Jasmine vs. Mocha, Chai, dan Sinon"
escapedcat
1
@Willa Saya telah membuat vid youtube berdasarkan jawaban ini youtube.com/watch?v=bJc078szrZA :)
bersling
70

Satu cara yang lebih singkat untuk memahami perbedaannya:

Orang yang menguji dengan Jasmine / Mocha biasa kemungkinan besar menjalankan semua kode dengan mesin virtual Node.

Menambahkan Karma ke dalam campuran (di atas kerangka pilihan Anda yang ada) akan menjalankan suite pengujian Anda dengan mesin browser lain.

Dengan melakukan ini, Anda mendapatkan sedikit tambahan yang Anda dapatkan dengan lingkungan browser. Akan lebih mudah untuk menguji kode terkait DOM, tetapi Anda juga akan memberikan sumber daya tambahan yang diberikan oleh mesin Node (seperti akses sistem file / shell)

SystematicFrank
sumber
34

Tesis orang yang merancang Karma sangat informatif dalam menggambarkan solusi yang ada dan membandingkannya, dan tentu saja menggambarkan Karma itu sendiri

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

Ringkasan: Karma adalah pelari ujian. Ini dapat digunakan oleh QUnit, Jasmine, Mocha, ... Karma memiliki keunggulan untuk pelari tes lainnya untuk meningkatkan siklus pengembangan TDD / BDD Anda. Itu "menonton" file, jadi ketika Anda menyimpan perubahan, Karma menjalankan tes dan melaporkan kembali secara instan, tanpa mengalihkan konteks ke Web Browser untuk menjalankan tes.

Singkatnya, mungkin pertanyaannya adalah Karma DAN Jasmine atau Mocha atau QUnit?

mauricio777
sumber
2
Bisakah Anda ringkasan kecil, dari tautan. Itu meningkatkan jawaban Anda
winner_joiner
1
Bisakah karma menjalankan tes Jest?
SuperUberDuper
Anda bisa menonton di Jasmine juga? Saya pikir begitu tetapi saya tidak tenang ingat.
Wang'l Pakhrin
@ Wang'l Pakhrin Saya tidak tahu bahwa Jasmine memiliki fungsi jam tangan, saya hanya menggunakan nodemon. "nodemon --exec jasmine" dan setiap kali Anda menyimpan file itu akan menjalankan tes.
snowfrogdev
Tesis ini tidak menyebutkan Jasmine.
Carl G