Jakie są używane frameworki do testowania jednostek JavaScript i wyśmiewania? [zamknięte]

Moim głównym frameworkiem JavaScript jest jQuery więc chciałbym, aby mój test jednostkowy i Framework szyderczy był z tym zgodny. Wolałbym nie wprowadzać innego frameworka JavaScript.

Obecnie używam QUnit do testów jednostkowych i Jack do szydzenia, ale jestem całkiem nowy w całym testowaniu jednostkowym JavaScript.

Czy ktoś jeszcze ma lepsze narzędzie do zaproponowania? Co ci się udało?

Author: Chic, 2008-10-16

14 answers

QUnit
jQUnit
pisanie testów JS za pomocą QUnit i jQUnit

QUnit jest frameworkiem do testów jednostkowych dla jQuery JavaScript framework. Sam framework testowy używa biblioteki jQuery, ale testy mogą być napisane dla dowolnego JavaScript i nie wymagają kodu do użycia jQuery. JQUnit jest zmodyfikowaną wersją QUnit, która dodaje w konfiguracji, tearddown i assert funkcje, które są bardziej typowe dla frameworku xUnit i zawiera wszystko w jedna zmienna globalna.

Wizualny interfejs strony testrunner jest ładny, pozwalając na wywiercenie i zobaczenie każdego twierdzenia w każdej metodzie testowej. Pisanie testów jest dość proste, a kod testowy można uruchomić bezpośrednio na stronie testRunner [8]. Pozwala to na łatwe i widoczne testowanie DOM.

QUnit: mit lub GPL (wybierz) Jqunit: Licencja MIT

Plusy
- Asynchroniczne wsparcie
- Dobry do testowania DOM
- Testy zawsze przebiegają kolejno w zamówienie są dodawane do pakietu
- Debugowanie na stronie testowej za pomocą firebug
- Składnia jest podobna do JUnit, jeśli używasz Jqunit, ale prosta do nauczenia się, jeśli używasz QUnit
Cons
- Automatyzacja byłaby trudna do wdrożenia

 18
Author: Chris MacDonald,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-19 19:30:51

Myślę, że Jack jest najlepszym frameworkiem dla JavaScript w momencie pisania tego tekstu. Głównym powodem jest to, że to, co jest dobre dla JavaScript, nie jest prawdopodobnie tym, co jest dobre dla silnie wpisanego języka, takiego jak Java.

Wiele frameworków szydzących z JavaScript jest inspirowanych frameworkami Javy (np. doskonałym JsMockito). Ale problem z nimi polega na tym, że wymagają dependency injection, ponieważ jest to jedyny rozsądny sposób na użycie wyśmiewania w Javie. Ale w JavaScript, istnieje wiele sposobów, aby używać mocking, i nie jesteś zmuszony do używania iniekcji zależności wszędzie.

Na przykład, z JsMockito, musisz zrobić mocki, a następnie przekazać te mocki do twojego software-under-test (SUT). SUT musi zadzwonić bezpośrednio do szyderców. Dlatego jesteś zmuszony do kodowania SUT jako konstruktora lub funkcji, która przyjmuje wszystkie swoje zależności jako parametry. (Czasami jest to dobry sposób na jego realizację, ale nie w każda sprawa. Ogon macha psem, jeśli twój szyderczy projekt frameworka wymusza Twoje podejście do implementacji).

W JavaScript bardzo łatwo jest "przejąć" dowolną funkcję. Dlatego istnieje mnóstwo sposobów na zbudowanie czegoś takiego, że można wyśmiewać jego części bez wyraźnego wstrzykiwania do niego zależności. Na przykład, Jack pozwala na makietę dowolnej funkcji , niezależnie od tego, czy jest publiczna, czy lokalna. Stamtąd możesz go szpiegować, stubować lub wyrażać oczekiwania. Na kluczowy punkt jest taki: gdy wyśmiewasz funkcję, wszelkie wywołania tej oryginalnej funkcji będą kierowane do Twojej makiety . Innymi słowy, twoje kpiny będą nadal używane, nawet jeśli została wywołana oryginalna, Nie wyśmiewana funkcja. W rezultacie nie jesteś zmuszony do wstrzykiwania zależności, chociaż z pewnością możesz to zrobić w tych przypadkach, które tego wymagają.

JavaScript jest innym językiem niż Java (i C# itp.) Pozwala na różne idiomy implementacyjne. zależność injection jest nadal jednym z cennych narzędzi w przyborniku w JavaScript, ale nie jest to już jedyna gra w mieście.Twoje szydercze ramy muszą wiedzieć i szanować ten fakt. Jack i kilku innych tak, ale z tych, które tak robią, Jack wydaje się być najbardziej dojrzały i bogaty w funkcje.

 21
Author: Charlie Flowers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-27 06:35:00

Nie wiem dlaczego nikt nie wspomniał JsTestDriver ! Musi to być jedno z niewielu narzędzi do testowania JS, które faktycznie działa tak, jak byś się tego spodziewał, jeśli używałeś narzędzi do testowania jednostkowego w innych językach.

Uruchamianie testów można wykonać bez dotykania przeglądarki, można zintegrować ją z IDE, można zintegrować z systemami ciągłej integracji... Jest szybki i może uruchamiać testy w wielu przeglądarkach jednocześnie.

Możesz również użyć innych testów Framework jak YUITest z nim, co czyni go jeszcze lepszym.

 12
Author: Jani Hartikainen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-12 23:20:00

Test YUI
TDD z testem YUI

Yui Test jest frameworkiem testowym dla Biblioteki interfejsu użytkownika Yahoo. Jest używany przez Yahoo do testowania własnej biblioteki i ma składnię podobną do jUnit.

Podobnie jak jsUnit, Yui Test jest wyposażony w własną konsolę logowania, która oprócz wyników każdego testu może wyświetlać informacje, ostrzeżenia i błędy.

YUI zapewnia również możliwość wysyłania raportów na wyniki w formacie JSON lub XML.

YUI Test posiada licencję BSD.

Plusy
- Naprawdę dobra dokumentacja
- Aktywna społeczność
- Regularne wydania
- Składnia jest podobna do jUnit (test suites, asserts and setup/teardown)
- Asynchroniczne wsparcie
- Dobry do testowania DOM
- Testy zawsze uruchamiane sekwencyjnie w kolejności, w jakiej są dodawane do pakietu

Cons
- Automatyzacja nie jest trywialna w implementacji, ale mniej trudna niż inne frameworki

 6
Author: Chris MacDonald,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-16 18:29:29

Zobacz też http://sinonjs.org/

Test szpiegów test stubów kpi z Fake timerów Fake XHR Fake serwera Sandboxing Assertions

To działa wraz z qUnit i to był plus do tej pory.

 3
Author: Alex Nolasco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-25 17:41:07

To jest całkiem dobra recenzja szyderczych frameworków dostępnych dla Javascript:

Http://testdrivenwebsites.com/2010/05/06/java-script-mock-frameworks-comparison

 2
Author: asgeo1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-02 23:51:58

Używamy jsspec jsspec . To bardzo miłe, jeśli lubisz rspec i BDD. Właśnie zobaczyłem artykuł Justina Gehtlanda o używaniu go również "bez głowy".

 1
Author: Robert J Berger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-19 07:38:04

Dla wyśmiewania się w JavaScript spójrz na qMock, framework, który wraz z kolegą napisaliśmy, aby uzupełnić nasze użycie QUnit. Chociaż ten ostatni jest świetny do testów jednostkowych, nie pozwala na bardzo skuteczne testy asynchroniczne / logiki biznesowej. Nie "otagowaliśmy" żadnego wydania jako stabilne, ale jest tam kilka przyzwoitych dokumentów, a jeśli sprawdzisz svn, zobaczysz, że qmock ma za sobą testy jednostkowe, które są dość oczywiste.

Oh, i zautomatyzować testowanie w ramach budowania użyliśmy prostego skryptu selenium do poruszania się po naszej testsuite( jedna strona testowa na plik JS) i "nasłuchiwaliśmy" na klasę CSS pass lub fail (dodaną przez QUnit). To działa bez głowy, jak również dla IE/FF2 AFAIK

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-20 10:24:19

W rozwoju Mozilli zakochuję się w UXU , opartym na MozUnit, ale wciąż aktywnym. Ma ładne funkcje, takie jak serwer makiety lub metody sleep / yeld.

 1
Author: Kartoch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-30 16:02:28

Używam frameworka Screw Unit test i napisałem własną bibliotekę o nazwie jsMocha, która od ponad 6 miesięcy jest intensywnie użytkowana w firmie, w której pracuję.

 1
Author: JamieD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-12 23:09:34

Wiem, że prosisz o frameworki kompatybilne z JQuery, ale chcę rzucić script.aculo.us do mieszanki dla kompletności. Mają test jednostkowy apartament, który nie jest zły.

 0
Author: pkaeding,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-16 17:08:55

Krzyżówka wydawała się niezwykle potężna, kiedy na nią patrzyłem, ale nie włączyliśmy jej do naszego procesu budowania. Ma tę zaletę, że jest bez przeglądarek, a zatem powinien działać dobrze w zautomatyzowanym scenariuszu budowania i testowania.

Http://thefrontside.net/crosscheck

 0
Author: Ben Fulton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-16 18:07:08

Możesz spróbować HtmlUnit, który miał jQuery zgodne wydanie ponad rok temu.

Zaletą HtmlUnit jest to, że nie napędza przeglądarki, więc jest szybki.

Minusem jest to, że nie obsługuje przeglądarki, więc są pewne rzeczy JS, które nie działają. Ale kompensowanie, że mogą uruchamiać testy JQuery, więc obsługa JS może być wystarczająco dobra dla tego, czego potrzebujesz.

 0
Author: Jeffrey Fredrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-19 07:57:27

JsUnit jest uruchamiany albo z przeglądarki, poprzez jej wtyczkę Eclipse, albo automatycznie poprzez zadanie ANT. Tworzysz stronę HTML z kilkoma funkcjami testowymi, które muszą być nazwane przedrostkiem "test", zawierać plik JS, który testujesz. Gdy jakiekolwiek assert wewnątrz funkcji nie powiedzie się, cała funkcja nie powiedzie się i przestaje być wykonywana. Nie ma gwarantowanej kolejności przeprowadzania tych testów. Można tworzyć funkcje setup() i teardown().

Licencja: GPL, GLPL, MPL

Plusy

  • automatyzacja jest stosunkowo łatwa do wdrożenia
  • dużo funkcjonalności
  • składnia jest podobna do JUnit

Cons

  • nie nadaje się do testowania DOM, ponieważ uruchamia testy wewnątrz ramki iFrame.
  • nie gwarantuje, że testy będą przeprowadzane w kolejności, w jakiej zostały napisane.
  • nie można użyć Firebug na stronie testrunner. Trzeba mieć inną kartę otwartą z rzeczywistym kodem testowym.
 0
Author: Chris MacDonald,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-08 14:02:02