Jaka jest najlepsza platforma testowa do użycia z Node.js? [Zamknięte]

130

Spojrzałem na dość długą listę frameworków testowych na https://github.com/ry/node/wiki/modules#testing . Jakie jest doświadczenie z tymi frameworkami?

Oczywiście możliwość uruchomienia w przeglądarce byłaby dużym bonusem, ale interesuje mnie głównie Node.js. Coś z mocno asynchronicznym nachyleniem byłoby świetne.

doffm
źródło

Odpowiedzi:

70

Aktualizacja:

Moim zdaniem najlepsza jest mokka .


Jakie jest doświadczenie z tymi frameworkami?

Bawiłem się expresso, które jest całkiem fajnym frameworkiem testowym, który ma również pokrycie testów. Został on stworzony przez TJ Holowaychuka, który jest także twórcą Express.js (niesamowicie szybkiego (i małego) frameworka do tworzenia stron WWW JavaScript po stronie serwera, zbudowanego na Node.js i Connect). Niedawno zobaczyłem, że ma też fajną bibliotekę o nazwie should.js, której można używać razem z Expresso, aby uzyskać jeszcze lepsze wrażenia z testowania.

Oczywiście możliwość uruchomienia w przeglądarce byłaby dużym bonusem

Nie wierzę, że może działać w przeglądarce, ale nie rozumiem też, dlaczego chcesz go uruchamiać w przeglądarce?

ale interesuje mnie głównie Node.js. Coś z mocno asynchronicznym nachyleniem byłoby świetne.

Cytat z expresso:

Argumentem przekazywanym do każdego wywołania zwrotnego jest beforeExit, który jest zwykle używany do potwierdzenia, że ​​wywołania zwrotne zostały wywołane.

Możesz użyć beforeExit do testowania funkcji asynchronicznych.


WSKAZÓWKA: Śledź TJ Holowaychuk na GitHub , ponieważ tworzy on bardzo dobry kod open source.

Alfred
źródło
Dzięki za odpowiedź, wypróbowałem expresso, ale okazało się, że obsługa asynchroniczna nie była zbyt intuicyjna. (W każdym razie dla mnie)
doffm
3
Obecnie wypróbowuję przysięgi ( vowsjs.org ), które były dla mnie łatwiejsze do zrozumienia.
doffm
samogłoski również wyglądały jak fajny framework do testowania. Podoba mi się funkcja pokrycia testu w expresso. Poza tym zastanawiam się, czego nie rozumiesz?
Alfred
4
Mówisz, że teraz wolisz Mocha, ale dlaczego?
Jonathan Arkell
Po prostu spróbuj. Mocha ma wszystko :). Nawet obsługa przeglądarki, pokrycie kodu. Ty to nazwij, mokka to ma!
Alfred
40

Używam VowsJS, który jest łatwym w użyciu frameworkiem asynchronicznym BDD (Behavior Driven Development) i wykonuję swoją pracę.

Z tego, co ostatnio widzę, wielu zdecydowało się przetestować swoje moduły NPM, więc uważam, że jak dotąd jest to jeden z najlepszych w użyciu.

Niektóre popularne frameworki testowe, które mogą być używane z NodeJS, to także:

Możesz również zobaczyć listę struktur testowych JavaScript tutaj

Kilka innych bibliotek, które mogą pomóc w napisaniu lepszego kodu, to:

Dostępny jest również Bamboo CI Server firmy Atlassian, który automatyzuje kompilacje i testy. Jest to pakiet dla Apache / Tomcat (który sux, ponieważ używa Java i przez to jest bardzo ciężki) również nie jest darmowy, ale ma licencję startową, która kosztuje 10 USD, więc uważam, że jest przystępna. Jest to najbardziej funkcjonalny ze wszystkich serwerów CI, które do tej pory znalazłem i obsługuje wszystkie testy jednostkowe obsługujące xUnit, co oznacza, że ​​możesz uruchamiać kompilacje / testy dla dowolnego języka z Bamboo.

Inną opcją CI z NodeJS jest Travis, z którego wiele osób korzysta w swoich projektach open source, jak mówi . Hostowana usługa ciągłej integracji dla społeczności open source.

Istnieje również dyskusja w grupie Google z tematem Continuous Integration for Node JS Projects .

panosru
źródło
6
Uwaga dla osób myślących o użyciu przysięgi: nie była aktualizowana od 2012 roku
Code Commander
Później dokonali pewnych zmian . ostatnie wydanie: wrzesień 2015
Andre Figueiredo
dostał złą bramę na oficjalnej stronie Vows w 2020 roku, może nie żyje?
Lincoln
wow, kolego, od tego czasu minęło DUŻO lat, wszystko, co mogłem znaleźć teraz o VowJS, to: istavros.github.io/vowjs, ale niestety nie mogę sugerować, że używasz go w 2020 roku. Jest przestarzały i zdecydowanie proponujemy zamiast tego sprawdzić Mocha ( mochajs.org ), Jasmin ( jasmine.github.io ) i Jest ( jestjs.io ).
panosru
14

Opierając się na komentarzach pytającego powyżej, wypróbowałem przysięgi i rozwiązało to wiele problemów, które miałem z moimi testami asynchronicznymi. Jego zdolność do mieszania testów szeregowych i równoległych jest niesamowita.

Upewnij się, że uważnie przeczytałeś poradnik, ale kiedy już go opanujesz, jest elastyczny, potężny i daje ładne, czyste wyniki.

UPDATE: Chciałbym również zachęcić ludzi, aby sprawdzić należy do ich twierdzi. Pozwala na bardzo elastyczne, bardzo czytelne potwierdzenia i jest kompatybilne zarówno z Expresso, jak i Vows, a także prawdopodobnie z większością innych frameworków testowych.

(Publikuję to jako osobną odpowiedź na wypadek, gdyby ludzie nie zauważyli komentarzy do odpowiedzi Alfreda.)

AKTUALIZACJA, 07.01.2015: Bez względu na to, co warto, od tego czasu przestawiłem się z Ślubów na Mocha iz Powinienem na Chai. Mocha ma teraz znacznie lepsze wsparcie dla testów asynchronicznych przy użyciu obietnic, a Chai pozwala na kilka elastycznych opcji asercji, w tym expectAPI, dla tych, którzy nie lubią modyfikować prototypu obiektu.

Chris Jaynes
źródło
1
shouldpinezki nieruchomość nie przeliczalny nazwie shoulddo Objectprototypu, czyli wszystkie wartości / obiekty masz do czynienia z wyglądem nieco inny w czasie badania oraz w czasie produkcji. Chociaż prawdopodobnie „po prostu działa” w większości przypadków, w zasadzie modyfikowanie wbudowanych prototypów jest złym pomysłem; robienie tego tylko podczas testów wydaje się złe. Wszystko zostało zrobione wyłącznie po to, aby mogli mieć ładną składnię.
wypływ
@flow od wersji 2 jest łatwy w użyciu shouldbez rozszerzania Object.prototype(po prostu zadzwoń require('should').noConflict()i użyj should.js jako oczekiwanej alternatywy.
den bardadym
6

Zacząłem używać Jasmine do testowania JavaScript, ponieważ jest mały i działa zarówno w przeglądarce, jak i węźle. Ma również naprawdę solidne API do raportowania i dopasowywania, dzięki czemu można go łatwo zintegrować z innymi narzędziami w przyszłości. Posiadanie frameworka do tworzenia buildinów jest również przydatne, ponieważ często jest to jedna z pierwszych rzeczy, które chciałbym dodać, gdy używałem qunit dla TDD w przeglądarce.

Mark B.
źródło
2

Jeśli chcesz prawdziwego frameworka BDD, może rozważ Yadda . Integruje się z mocha, jasmine, nodeunit, qunit, zombie i casperjs, aby obsługiwać pliki funkcji, np.

   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
user2434418
źródło
2

Używam nodeunit i jego zdolności do pracy z funkcji asynchronicznych jest dość prosta.

Na jego blogu jest fajna instrukcja, która powinna przygotować Cię do pracy z nodeunit .

[ Uwaga: API zmieniło się od czasu postu na blogu - setUp(callback)i tearDown(callback)oba przyjmują wywołanie zwrotne jako argument, który należy wywołać po zakończeniu konfiguracji / dezaktywacji. ]

Vanwaril
źródło
Patrząc na to i po kilku testach funkcji mongoose.js w expresso, użyteczna jest opcja nodeunit, aby nie uruchamiać wszystkich testów równolegle i zezwalać na testy setUp i tearDown.
asparagino