Node.js ile kullanılacak en iyi test çerçevesi nedir? [kapalı]


130

Https://github.com/ry/node/wiki/modules#testing adresindeki oldukça uzun test çerçeveleri listesine baktım . Bu çerçevelerle ilgili deneyim nedir?

Açıkçası tarayıcıda çalıştırma yeteneği büyük bir bonus olacaktır, ancak esas olarak Node.js ile ilgileniyorum. Ağır asenkron eğime sahip bir şey harika olurdu.

Yanıtlar:


70

Güncelleme:

Mocha bence en iyisi.


Bu çerçevelerle ilgili deneyim nedir?

Test kapsamı da olan oldukça güzel bir test çerçevesi olan expresso ile oynadım . Aynı zamanda Express.js'nin (Node.js ve Connect üzerine kurulu inanılmaz derecede hızlı (ve küçük) sunucu tarafı JavaScript web geliştirme çerçevesi) yaratıcısı olan TJ Holowaychuk tarafından oluşturuldu . Yakın zamanda, daha iyi bir test deneyimi için Expresso ile birlikte kullanılabilecek, should.js adında harika bir kitaplığı olduğunu da gördüm .

Açıkçası, tarayıcıda çalıştırma yeteneği büyük bir bonus olacaktır

Tarayıcıda çalışabileceğine inanmıyorum, ama aynı zamanda neden tarayıcı içinde çalıştırmak istediğinizi de anlamıyorum?

ama esas olarak Node.js ile ilgileniyorum. Ağır asenkron eğime sahip bir şey harika olurdu.

Espresso'dan alıntı:

Her geri aramaya iletilen bağımsız değişken, genellikle geri aramaların çağrıldığını iddia etmek için kullanılan beforeExit'tir.

Eşzamansız işlevleri test etmek için beforeExit'i kullanabilirsiniz.


İPUCU: Takip TJ Holowaychuk üzerinde GitHub'dan , o çok iyi açık kaynak kodunu oluşturur çünkü.


Cevabınız için teşekkürler, expresso'yu denedim ancak eşzamansız desteğin çok sezgisel olmadığını gördüm. (Yine de benim için)
doffm

3
Şu anda anlaması daha kolay olan yeminleri ( vowsjs.org ) deniyorum .
doffm

vowjs ayrıca güzel bir test çerçevesi gibi görünüyordu. Expresso'nun test kapsama özelliğini beğendim. Artı, neyi anlamadığını merak ediyorum?
Alfred

4
Şimdi Mocha'yı tercih ettiğinizi söylüyorsunuz, ama neden?
Jonathan Arkell

Sadece dene. Mocha her şeye sahiptir :). Hatta tarayıcı desteği, kod kapsamı. Adını sen koy, mocha'da var!
Alfred

40

Asenkron BDD çerçevesi (Davranış Odaklı Geliştirme) kullanımı kolay olan VowsJS kullanıyorum ve işi hallediyorum .

Son zamanlarda gördüğüm kadarıyla, pek çok kişinin NPM modüllerini test etmeyi seçtiği şey bu, bu yüzden şimdiye kadar kullanılabilecek en iyisi olduğuna inanıyorum.

NodeJS ile kullanılabilecek bazı popüler test çerçeveleri ayrıca şunlardır:

Burada JavaScript test çerçevelerinin bir listesini de görebilirsiniz.

Daha iyi kod yazmanıza yardımcı olabilecek birkaç kitap daha şunlardır:

Ayrıca, Atlassian tarafından yapılan Bamboo CI Sunucusu da vardır, bu, yapıları ve testleri otomatikleştirir. Bu Apache / Tomcat için bir pakettir (Java kullandığı ve bu onu çok ağır kıldığı için sux) da ücretsiz değil ama 10 $ 'lık bir başlangıç ​​lisansına sahip, bu yüzden uygun olduğuna inanıyorum. Şimdiye kadar bulduğum tüm CI sunucuları arasında en özellikli olanı ve xUnit'i destekleyen tüm birim testlerini destekliyor , bu da Bamboo ile herhangi bir dil için derlemeler / testler çalıştırabileceğiniz anlamına geliyor.

NodeJS ile CI için diğer bir seçenek olan Travis onun söylediği gibi insanların çok onların açık kaynak projeleri için kullanmak bir açık kaynak topluluğu için sürekli entegrasyon hizmetini ev sahipliği yaptı.

Ayrıca Node JS Projeleri için Sürekli Entegrasyon konusuyla ilgili bir google grup tartışması da var .


6
Yemin kullanmayı düşünenler için bir not: 2012'den beri güncellenmedi
Code Commander

Sonrasında bazı değişiklikler yaptılar . son sürüm: Eyl, 2015
Andre Figueiredo

2020'de Vows oficial sitesinde kötü bir ağ geçidi var, belki ölmüş?
Lincoln

vay, dostum, o zamandan bu yana bir sürü yıl geçti, şu anda VowJS hakkında bulabildiğim tek şey şu: istavros.github.io/vowjs ama maalesef 2020'de kullanmanızı öneremem . Modası geçmiş ve kesinlikle Eğer Mocha kontrol önermek ( mochajs.org ), Jasmin ( jasmine.github.io ) ve Jest ( jestjs.io yerine).
panosru

14

Yukarıdaki soruyu soranların yorumlarına dayanarak, yeminleri denedim ve asenkron testimde yaşadığım birçok sorunu çözdüm. Seri ve paralel testleri karıştırma yeteneği harika.

Kılavuz belgesini dikkatlice okuduğunuzdan emin olun, ancak onu bir kez anladığınızda, esnek, güçlü ve güzel, temiz sonuçlar üretiyor.

GÜNCELLEME: İnsanları iddialarını kontrol etmeleri için de teşvik ederim . Çok esnek, çok okunabilir iddialara izin verir ve hem Expresso hem de Vows ve muhtemelen diğer birçok test çerçevesiyle uyumludur.

(İnsanlar Alfred'in cevabındaki yorumları fark etmezler diye bunu ayrı bir cevap olarak gönderiyorum.)

GÜNCELLEME 1/7/2015: Değeri ne olursa olsun, o zamandan beri Vows'dan Mocha'ya ve Should'dan Chai'ye geçtim. Mocha, vaatleri kullanan eşzamansız testler için artık çok daha iyi desteğe sahip ve Chai expect, nesne prototipini değiştirmeyi sevmeyenler için api dahil olmak üzere birkaç esnek iddia seçeneğine izin veriyor .


1
shouldçiviler adında olmayan bir enumerable özellik shouldiçin Objectanlam prototip, bütün değerlerin / bakışla sen bir alışverişte nesneleri hafifçe Test sırasında ve üretim sırasında farklı. Bu muhtemelen çoğu durumda 'sadece işe yarasa da' yerleşik prototipleri değiştirmek prensipte kötü bir fikirdir; bunu sadece test sırasında yapmak yanlış geliyor. Hepsi yalnızca güzel bir sözdizimine sahip olabilmeleri için yapıldı.
akış

@flow v2'den bu yana shouldgenişletmeden kullanımı kolaydır Object.prototype(sadece require('should').noConflict()bir alternatif olarak should.js'yi çağırın ve kullanın.
den bardadym

6

Jasmine'i JavaScript testim için özellikle küçük olduğu ve hem tarayıcıda hem de düğümde çalıştığı için kullanmaya başladım . Aynı zamanda gerçekten sağlam bir raporlama ve eşleştirme API'sine sahip olduğundan, gelecekte diğer araçlarla entegre edilmesi kolaydır. Tarayıcıda TDD için qunit kullandığımda ekleyeceğim ilk şeylerden biri olduğundan, bir yapı alaycı çerçeveye sahip olmak da yararlıdır.


2

Gerçek bir BDD çerçevesi istiyorsanız, o zaman Yadda'yı düşünebilirsiniz . Özellik dosyalarını desteklemek için mocha, yasemin, nodeunit, qunit, zombi ve casperjs ile entegre olur, örn.

   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

2

Nodeunit kullanıyorum ve eşzamansız işlevlerle çalışma yeteneği oldukça basit.

Blogunda nodeunit ile gitmeye hazır olmanızı sağlayacak güzel bir çözüm var .

[ Not: API, blog gönderisinden bu yana değişti setUp(callback)ve tearDown(callback)her ikisi de, kurulumunuz / sökülmeniz tamamlandığında aramanız gereken bir geri aramayı bağımsız değişken olarak alır. ]


Buna bakıldığında ve expresso'da mongoose.js işlevlerinin birkaç testini denedikten sonra, nodeunit'in tüm testleri paralel olarak çalıştırmama ve kurulum ve tearDown testlerine izin verme tercihi yararlı görünmektedir.
asparagino
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.