Apa kerangka kerja pengujian terbaik untuk digunakan dengan Node.js? [Tutup]

130

Saya telah melihat daftar kerangka pengujian yang agak panjang di https://github.com/ry/node/wiki/modules#testing . Apa pengalaman dengan kerangka kerja ini?

Jelas kemampuan untuk berjalan di browser akan menjadi bonus besar, tapi saya terutama tertarik pada Node.js. Sesuatu dengan kemiringan yang sangat tidak sinkron akan bagus.

doffm
sumber

Jawaban:

70

Memperbarui:

Mocha adalah yang terbaik menurut saya.


Apa pengalaman dengan kerangka kerja ini?

Saya bermain dengan expresso yang merupakan kerangka pengujian yang cukup keren yang juga memiliki cakupan uji. Ini telah dibuat oleh TJ Holowaychuk yang juga pencipta Express.js (sangat cepat (dan kecil) kerangka kerja web JavaScript sisi server dibangun di atas Node.js dan Connect). Baru-baru ini saya melihat bahwa dia juga memiliki perpustakaan keren bernama should.js yang dapat digunakan bersama dengan Expresso untuk pengalaman pengujian yang lebih baik.

Tentunya, kemampuan untuk berjalan di browser akan menjadi bonus besar

Saya tidak percaya itu bisa berjalan di browser, tetapi saya juga tidak mengerti mengapa Anda ingin menjalankannya di dalam browser?

tapi saya terutama tertarik pada Node.js. Sesuatu dengan kemiringan yang sangat tidak sinkron akan bagus.

Kutipan dari expresso:

Argumen yang diteruskan ke setiap panggilan balik adalah beforeExit, yang biasanya digunakan untuk menyatakan bahwa panggilan balik telah dipanggil.

Anda dapat menggunakan beforeExit untuk menguji fungsi asinkron.


TIP: Ikuti TJ Holowaychuk di GitHub , karena ia menciptakan kode sumber terbuka yang sangat baik.

Alfred
sumber
Terima kasih atas jawabannya, saya mencoba mengungkapkan tetapi menemukan bahwa dukungan async tidak terlalu intuitif. (Bagi saya)
doffm
3
Saat ini saya mencoba sumpah ( vowsjs.org ) yang lebih mudah bagi saya untuk mengerti.
doffm
vowjs juga tampak seperti kerangka pengujian yang bagus. Saya suka fitur cakupan tes expresso. Ditambah lagi, aku bertanya-tanya apa yang tidak kau mengerti?
Alfred
4
Anda mengatakan bahwa Anda lebih suka Mocha sekarang, tetapi mengapa?
Jonathan Arkell
Cobalah. Mocha memiliki segalanya :). Bahkan dukungan browser, cakupan kode. Sebut saja, mocha memilikinya!
Alfred
40

Saya menggunakan VowsJS yang mudah digunakan async BDD framework (Behavior Driven Development) dan menyelesaikan pekerjaan.

Dari apa yang saya lihat akhir-akhir ini itulah yang banyak dipilih untuk menguji modul NPM mereka, jadi saya percaya sejauh ini adalah yang terbaik untuk digunakan.

Beberapa kerangka kerja pengujian populer yang dapat digunakan dengan NodeJS juga adalah mereka:

Anda juga dapat melihat daftar kerangka kerja pengujian JavaScript di sini

Lebih sedikit lib yang dapat membantu Anda menulis kode yang lebih baik adalah:

Ada juga Bamboo CI Server oleh Atlassian yang mengotomatiskan pembuatan dan pengujian. Ini adalah paket untuk Apache / Tomcat (yang sux karena menggunakan Java dan yang membuatnya sangat berat) juga tidak gratis tetapi memiliki lisensi pemula yang biaya $ 10 jadi saya percaya itu terjangkau. Ini adalah yang paling unggulan dari semua server CI yang saya temukan sejauh ini dan mendukung semua tes unit yang mendukung xUnit yang berarti Anda dapat menjalankan build / tes untuk bahasa apa pun dengan Bamboo.

Opsi lain untuk CI dengan NodeJS adalah Travis yang banyak orang gunakan untuk proyek open source mereka, seperti dikatakan Layanan integrasi berkesinambungan yang di-host untuk komunitas open source.

Ada juga diskusi grup google dengan topik Continuous Integration for Node JS Projects .

panosru
sumber
6
Catatan untuk orang yang berpikir untuk menggunakan Sumpah: belum diperbarui sejak 2012
Code Commander
Mereka membuat beberapa perubahan setelahnya . rilis terakhir: Sep, 2015
Andre Figueiredo
mendapat gateway buruk di situs Sumpah resmi pada tahun 2020, mungkin mati?
Lincoln
wow, sobat, sudah BANYAK tahun sejak itu, yang bisa saya temukan tentang VowJS sekarang adalah ini: istavros.github.io/vowjs tapi sayangnya, saya tidak bisa menyarankan Anda menggunakannya pada tahun 2020. Itu sudah usang, dan saya akan sangat sarankan Anda memeriksa Mocha ( mochajs.org ), Jasmin ( jasmine.github.io ) dan Jest ( jestjs.io ) sebagai gantinya.
panosru
14

Berdasarkan komentar penanya di atas, saya mencoba sumpah , dan itu memecahkan banyak masalah yang saya alami dengan pengujian async saya. Kemampuannya untuk mencampur pengujian serial dan paralel sangat mengagumkan.

Pastikan Anda membaca dokumen pedoman dengan seksama, tetapi begitu Anda terbiasa, itu fleksibel, kuat, dan menghasilkan hasil yang bagus dan bersih.

UPDATE: Saya juga akan mendorong orang untuk memeriksa harus untuk penegasan mereka. Hal ini memungkinkan untuk menegaskan sangat fleksibel, sangat mudah dibaca, dan kompatibel dengan Expresso dan Sumpah, dan mungkin sebagian besar kerangka kerja pengujian lainnya.

(Saya memposting ini sebagai jawaban terpisah untuk berjaga-jaga kalau-kalau orang tidak melihat komentar pada jawaban Alfred.)

UPDATE 1/7/2015: Untuk apa nilainya, saya sejak beralih dari Sumpah ke Mocha, dan dari Harus ke Chai. Mocha memiliki dukungan yang jauh lebih baik sekarang untuk pengujian asinkron menggunakan janji, dan Chai memungkinkan untuk beberapa opsi menegaskan yang fleksibel, termasuk expectapi, bagi mereka yang tidak suka memodifikasi prototipe objek.

Chris Jaynes
sumber
1
shouldTacks properti non-enumerable bernama shouldke Objectprototipe, yang berarti semua nilai / objek yang Anda hadapi terlihat sedikit berbeda pada waktu pengujian dan pada waktu produksi. Meskipun ini mungkin 'hanya berfungsi' dalam banyak kasus, pada prinsipnya ide buruk untuk memodifikasi prototipe bawaan; melakukannya hanya selama pengujian terasa salah. Ini semua hanya dilakukan agar mereka dapat memiliki sintaks yang bagus.
mengalir
@ mengalir sejak v2 mudah digunakan shouldtanpa memanjang Object.prototype(cukup panggil require('should').noConflict()dan gunakan should.js sebagai alternatif yang diharapkan.
den bardadym
6

Saya sudah mulai menggunakan Jasmine untuk pengujian JavaScript saya secara khusus karena kecil dan berjalan di browser dan node. Ini juga memiliki API pelaporan dan pencocokan yang sangat solid sehingga mudah untuk diintegrasikan dengan alat lain di masa mendatang. Memiliki kerangka kerja mengejek juga berguna karena sering salah satu hal pertama yang saya tambahkan ketika saya menggunakan qunit untuk TDD di browser.

Markus B
sumber
2

Jika Anda ingin kerangka BDD yang benar maka mungkin pertimbangkan Yadda . Terintegrasi dengan mocha, melati, nodeunit, qunit, zombie dan casperjs, untuk mendukung file fitur, misalnya

   Scenario: provides the version of all services
      given service x is running
      and service y is running
      when I request the service versions
      then service x should be version 0.0.1
      and service y should be version 0.0.2
pengguna2434418
sumber
2

Saya telah menggunakan nodeunit dan kemampuannya untuk bekerja dengan fungsi-fungsi async cukup mudah.

Ada langkah-langkah bagus yang bisa membuat Anda siap-pakai dengan nodeunit di blog-nya .

[ Catatan: API telah berubah sejak blogpost - setUp(callback)dan tearDown(callback)keduanya menerima panggilan balik sebagai argumen, yang harus Anda panggil saat setup / teardown Anda selesai. ]

Vanwaril
sumber
Melihat ini dan setelah mencoba beberapa tes fungsi mongoose.js di expresso, preferensi nodeunit untuk tidak menjalankan semua tes secara paralel dan mengizinkan tes setUp dan tearDown terlihat berguna.
asparagino