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.
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 .
źródło
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
expect
API, dla tych, którzy nie lubią modyfikować prototypu obiektu.źródło
should
pinezki nieruchomość nie przeliczalny nazwieshould
doObject
prototypu, 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ę.should
bez rozszerzaniaObject.prototype
(po prostu zadzwońrequire('should').noConflict()
i użyj should.js jako oczekiwanej alternatywy.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.
źródło
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
źródło
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)
itearDown(callback)
oba przyjmują wywołanie zwrotne jako argument, który należy wywołać po zakończeniu konfiguracji / dezaktywacji. ]źródło