Testy jednostkowe Node.js [zamknięte]


164

Czy są obecnie dostępne dobre frameworki do testów jednostkowych node.js (po stronie serwera)? Szukam czegoś głębszego niż dostarczony moduł Assert.

Odpowiedzi:


66

Skończyło się na korzystaniu z node-unit i jestem z tego naprawdę zadowolony.

Używałem Expresso pierwotnie ale fakt, że działa on testy równolegle spowodowało kilka problemów. (Na przykład używanie urządzeń bazodanowych nie działa dobrze w tej sytuacji).


25
Expresso nie zmusza Cię do równoległego uruchamiania testów. Podaj mu argument --serial, a uruchomi je wszystkie w wesołej kolejności.
einaros

3
Właśnie pobrany i użyty nodeunit ... robi dokładnie to, co mówi, zadziałał za pierwszym razem ftw!
Michael Dausmann,

1
Nodeunit jest trochę dziwny, ponieważ wymaga, aby każdy test wywoływał .done()imho.
Kos

2
Gdybym teraz zaczynał nowy projekt, prawdopodobnie
użyłbym

1
Węzeł wymaga .done()uwzględnienia testowania asynchronicznego. Zgadzam się, że czasami może to być trochę nieporęczne, ale ma świetny powód, aby robić to w ten sposób.
L0j1k

48

Szukałem też porządnego frameworka testowego dla węzła i znalazłem Mocha . Jest oficjalnym następcą Expresso i wydaje się bardzo dojrzały.

Pozwala na podłączanie różnych bibliotek asercji, oferuje reporterzy do pokrycia kodu i innych rzeczy (możesz podłączyć własne). Może uruchamiać synchronizację lub asynchronicznie i ma zwięzły interfejs API.

Spróbuję i zdam raport ...

EDYTOWAĆ:

Po niesamowitej ilości czasu poświęconego innym projektom w końcu wróciłem do projektu Javascript i miałem czas na zabawę z mokką. Mogę poważnie polecić jej używanie. Testy czytają bardzo ładnie, integracja z gulpem jest świetna, a testy przebiegają bardzo szybko. Udało mi się skonfigurować automatyczne, samodzielne, a także testy w przeglądarce (browserify) i odpowiadające im raporty pokrycia kodu w około pół dnia (większość czasu spędziłem na zrozumieniu, jak korzystać z browserify z gulp). Dla mnie mocha wydaje się bardzo dobrym wyborem na framework testowy.

AKTUALIZACJA:

Nadal jestem bardzo przekonany o Mocha. Integracja z chai pozwala na podłączenie różnych stylów asercji. Możesz sprawdzić działającą konfigurację w tym projekcie github . Używam go teraz z karmą, integrując raport pokrycia kodu, automatyczne obserwatory i dobrą integrację z IntelliJ


Link do projektu github jest uszkodzony. Czy mógłbyś go odnowić?
karlisup


15

Osobiście korzystałem tylko z modułu assert, ale też chcę więcej. Przejrzałem wiele modułów węzłów, a popularne frameworki testów jednostkowych to węzły-jednostka i powinny (które są tworzone przez tego samego gościa co Expresso (może zaktualizowana nazwa?)

Śluby również wyglądają obiecująco.


15
Głosuję za tobą tylko za ten kalambur.
ThomasReggi,

15

Osobiście utknąłem w Expresso , ale istnieje kilka różnych frameworków, które obsługują większość stylów testowania.

Joyent ma obszerną listę ; daj temu szansę.


1
Expresso jest jedynym, który ma dla mnie sens i działa poprawnie z kodem asynchronicznym. Próbowałem ślubów i qunit.
balupton,

5

śluby jest stałe badanie biblioteka jednostką node.js ale składnia jest nużące.

Napisałem cienką abstrakcję zwaną ślubowaniem - płynna vows dzięki której API można łączyć w łańcuch.

Napisałem też inną abstrakcję, [vows-is], która opiera się na ślubowaniu-płynnym i odsłania składnię w stylu BDD.

Przykładem może być

var is = require("vows-is");

is.suite("testing is fun").batch()

    .context("is testing fun?")
        .topic.is("yes")
        .vow.it.should.equal("yes")

.suite().run({
    reporter: is.reporter
});

Więcej przykładów


6
Amen, że składnia ślubowania jest przerażająca IMO
Donn Felker

Miałem zabawę z przysięgami z apetycznym opakowaniem. Wyglądał na dobry pomysł na przetestowanie API JSON, ale szybko się nie udał. Wydaje mi się również, że interfejsy API, które są silnie zorientowane na łączenie wywołań w łańcuchy, są trudne w użyciu i trudne do debugowania. Wyglądają dobrze na przykładach, ale nie działają dobrze w rzeczywistym świecie.
drekka

@drekka przysięgi i ślubowania są straszne. użyj
mokki

Próbuję tego teraz, ale wydaje się, że napotykam na podobną grupę problemów.
drekka

wtedy musisz go źle używać. spróbuj przeczytać gist.github.com/2896455 . @drekka
Raynos



0

Pierwotnie wykonany dla node.js, deadunit jest testowanie jednostki biblioteki javascript dla node.js oraz przeglądarce. Niektóre z jego unikalnych atrybutów:

  • Łatwa nauka
  • Może wyświetlać wyniki testów w wierszu poleceń (kolorowy lub zwykły tekst) lub w formacie html
  • Wyświetla rzeczywiste wiersze kodu, w których znajdują się twoje potwierdzenia, więc twoje dane wyjściowe mają sens nawet jeśli nie spędzasz dużo czasu na pisaniu komentarzy do testu
  • Ma proste countpotwierdzenie, które ułatwia obsługę oczekiwanych wyjątków i asynchronicznych potwierdzeń
  • wypisuje wyjątek i wszelkie załączone dane, które mają
  • poinformuje Cię, jeśli Twój kod się zawiesza (coś, czego nie chcesz, ale zwykle pozostaje niezauważone)
  • Posiada interfejs API sterowany zdarzeniami, który umożliwia przesyłanie strumieniowe wyników testów w sieci lub w dowolny sposób.
  • Obsługuje testowanie z włóknami węzłowymi

0

Właśnie załadowałem projekt, którego używam do testów jednostkowych nodejs z karmą i Jasmine: narma . Twoje moduły węzłów są ładowane do przeglądarki nodewebkit, dzięki czemu możesz uruchamiać moduły węzłów i używać bibliotek, takich jak jquery, w tej samej stercie.


0

studio testowe to pakiet npm, który zapewnia potężny, oparty na sieci Web interfejs do testowania jednostkowego. Obsługuje takie rzeczy, jak wykonywanie pojedynczych lub grup testów i przechodzenie inspektora węzła do poszczególnych testów. Obecnie obsługuje mokkę, a więcej ram będzie obsługiwanych w przyszłości, biorąc pod uwagę zapotrzebowanie.

Przeczytaj więcej na ten temat tutaj .

Zastrzeżenie: jestem autorem.


1
wygląda na to, że to napisałeś, prawda? jeśli tak, powinieneś ujawnić ten fakt w swojej odpowiedzi.
strugee
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.