JavaScript unit test tools for TDD

Przyjrzałem się i rozważałem wiele testów jednostkowych JavaScript i narzędzi testujących, ale nie byłem w stanie znaleźć odpowiedniej opcji, aby pozostać w pełni zgodnym z TDD. Czy istnieje narzędzie do testowania jednostek JavaScript, które jest w pełni zgodne z TDD?

Author: Mark Levison, 2008-11-19

13 answers

Karma lub kątomierz

Karma jest testowym biegaczem JavaScript zbudowanym z Node.js i przeznaczone do testów jednostkowych.

Kątomierz służy do kompleksowego testowania i używa sterownika Selenium Web do prowadzenia testów.

Oba zostały wykonane przez zespół Angular. Możesz użyć dowolnej biblioteki twierdzeń, z którą chcesz.

Screencast: Karma zaczyna się

Powiązane:

Plusy :

  • używa node.js, więc kompatybilny z Win / OS X / Linux
  • Uruchom testy z przeglądarki lub bez głowy z PhantomJS
  • uruchamianie na wielu klientach jednocześnie
  • Możliwość uruchamiania, przechwytywania i automatycznego wyłączania przeglądarek]}
  • opcja uruchomienia serwera / klienta na komputerze deweloperskim lub oddzielnie
  • Uruchom testy z linia poleceń (może być zintegrowana z ant/maven)
  • napisz testy xUnit lub BDD style
  • obsługuje wiele frameworków testowych JavaScript
  • Automatyczne uruchamianie testów na save
  • Proxy żądają cross-domeny
  • Możliwość dostosowania:
      [[24]}Rozszerz go na inne frameworki testowe (Jasmine, Mocha, QUnit wbudowane)
  • Twoje własne twierdzenia / obalenia
  • Reporterzy
  • Wyrzutnie Przeglądarek
  • wtyczka do WebStorm
  • obsługiwane przez NetBeans IDE
  • Wady :

    Mocha.js

    Nie mam zastrzeżeń do komentowania mocha.cechy, mocne i słabe strony js, ale po prostu polecił mi go ktoś, komu ufam w społeczności JS.

    Lista funkcji, jak zgłoszone przez swoją stronę:

    • obsługa przeglądarki
    • proste wsparcie asynchroniczne, w tym obietnice
    • raportowanie zasięgu testu
    • obsługa różnic ciągów
    • javascript # API do uruchamiania testów
    • właściwy status wyjścia dla obsługi CI itp
    • auto-wykrywa i wyłącza kolorowanie dla nie-ttys
    • maps uncaught exceptions to the correct test case
    • async test timeout wsparcie
    • testy-specific timeouts
    • growl obsługa powiadomień
    • raporty czas trwania testów
    • podkreśla powolne testy
    • obsługa kontrolera plików
    • globalne wykrywanie nieszczelności zmiennych
    • opcjonalnie uruchamiaj testy, które pasują do wyrażenia regularnego
    • automatyczne wyjście zapobiegające "zawieszeniu" z aktywną pętlą
    • łatwy meta-generowanie pakietów i przypadków testowych
    • Mocha.opts obsługa plików
    • klikalne tytuły pakietu do filtrowania wykonania testu
    • obsługa debuggera węzła
    • wykrywa wiele wywołania do done ()
    • użyj dowolnej biblioteki twierdzeń
    • W 2007 roku firma została założona przez Marka i Marka S. A. z siedzibą w Nowym Jorku.]}
    • extensible test DSLs lub "Interfejsy"
    • przed, po, Przed każdym, po każdym haku
    • obsługa dowolnego transpilera (coffee-script itp.)
    • TextMate bundle

    Yolpo

    yolpo

    To już nie istnieje, przekierowuje na sekwencyjne.js zamiast

    Yolpo jest narzędzie do wizualizacji wykonania javascript. Deweloperzy API Javascript są zachęcani do pisania swoich przypadków użycia, aby pokazać i opowiedzieć swoje api. Takie przypadki użycia stanowią podstawę testów regresyjnych.

    AVA

    Logo AVA

    Futurystyczny biegacz testowy z wbudowaną obsługą ES2015. Mimo że JavaScript jest jednowątkowy, IO w węźle.js może występować równolegle ze względu na swój asynchroniczny charakter. AVA korzysta z tego i przeprowadza testy jednocześnie, co jest szczególnie korzystne dla ciężkich testów IO. Ponadto pliki testowe są uruchamiane równolegle jako oddzielne procesy, co zapewnia jeszcze lepszą wydajność i izolowane środowisko dla każdego pliku testowego.

    • Minimal and fast
    • prosta składnia testowa
    • uruchamia testy jednocześnie
    • wymusza pisanie testów atomowych
    • no implicit globals
    • izolowane środowisko dla każdego pliku testowego
    • Napisz swoje testy w ES2015
    • Promise wsparcie
    • Obsługa funkcji generatora
    • obsługa funkcji asynchronicznych
    • obserwowalne wsparcie
    • wzmocnione twierdzenia
    • opcjonalny kran o utput
    • Wyczyść ślady stosu

    Buster.js

    Test JavaScript-runner zbudowany z Node.js. Bardzo modułowa i elastyczna. Jest wyposażony w własną bibliotekę twierdzeń, ale możesz dodać własną, jeśli chcesz. Biblioteka assertions jest odsprzęgnięta, więc można jej używać również z innymi test-biegacze. Zamiast używać assert(!...) LUB expect(...).not..., używa refute(...), co jest miłym zwrotem imho.

    Zestaw Narzędzi do testowania JavaScript przeglądarki. Wykonuje testy przeglądarek za pomocą automatyzacji przeglądarki (think JsTestDriver), statyczne testowanie stron HTML w stylu qunit, testowanie w przeglądarkach bezgłowych (phantomjs, jsdom,...) i nie tylko. Spójrz na przegląd !

    Węzeł.zestaw narzędzi do testowania js. Otrzymujesz tę samą bibliotekę przypadków testowych, bibliotek twierdzeń itp. Jest to również Świetne dla hybrydy przeglądarka i węzeł.kod js. Napisz swoją sprawę z Busterem.JS i uruchom go zarówno w Node.js i w prawdziwej przeglądarce.

    Screencast: Buster.js pierwsze kroki (2:45)

    Plusy :

    • używa node.js, więc kompatybilny z Win / OS X / Linux
    • [[24]} Uruchom testy z przeglądarki lub bez głowy z PhantomJS (wkrótce)
    • uruchamianie na wielu klientach jednocześnie
    • obsługuje testowanie NodeJS
    • nie trzeba uruchamiać serwera / klienta przy rozwoju komputer (nie potrzeba IE)
    • Uruchamianie testów z wiersza poleceń (może być zintegrowane z ant/maven)
    • napisz testy xUnit lub BDD style
    • obsługuje wiele frameworków testowych JavaScript
    • Odrocz testy zamiast komentować je
    • SinonJS wbudowany
    • Auto-uruchom testy na save
    • Proxy żądają cross-domeny
    • Możliwość dostosowania:
      • Rozszerz go o inne frameworki testowe (jstestdriver zbudowany in)
      • Twoje własne twierdzenia / obalenia
      • W 2007 roku firma została założona przez Marka Tap-A, a w 2008 roku przez firmę tap-a.]}
      • Dostosuj / zastąp HTML, który jest używany do uruchamiania testów przeglądarki
    • Integracja TextMate i Emacs

    Wady :

    • Stil w wersji beta więc może być buggy
    • brak pluginu dla Eclipse/IntelliJ (jeszcze)
    • nie grupuje wyników według os / browser / version jak TestSwarm *. Tak., jednak wydrukuj nazwę przeglądarki i wersję w wynikach testu.
    • brak historii poprzednich wyników testów, takich jak TestSwarm *
    • Nie działa w pełni na windows od maja 2014

    * TestSwarm jest również serwerem ciągłej integracji, podczas gdy potrzebujesz oddzielnego serwera CI dla Bustera.js. To jednak generuje raporty xUnit XML, więc powinno być łatwe do integracji z Hudson, Bambus lub inny CI serwery.

    TestSwarm

    Https://github.com/jquery/testswarm

    TestSwarm oficjalnie nie jest już aktywnie rozwijany, jak podano na ich stronie GitHub. Polecają Karma, browserstack-runner lub Intern.

    Jasmine

    Jasmine

    Jest to test-runner po stronie klienta, który może zainteresować programistów znających Ruby lub Ruby on Rails. Składnia oparta jest na RSpec , który służy do testowania w Projekty Rails.

    Jasmine jest frameworkiem programistycznym opartym na zachowaniu do testowania kodu JavaScript. Nie zależy od innych frameworków JavaScript. Nie wymaga DOM.

    Jeśli masz doświadczenie z tym biegaczem testowym, podaj więcej informacji:)

    Projekt domu: http://jasmine.github.io/

    QUnit

    QUnit skupia się na testowaniu JavaScript w przeglądarce, zapewniając jednocześnie jak największą wygodę do dewelopera, jak to możliwe. Blurb from the site:

    QUnit jest potężnym, łatwym w użyciu zestawem testów jednostek JavaScript. Jest używany przez projekty jQuery, jQuery UI i jQuery Mobile i może testować dowolny ogólny kod JavaScript
    [[9]}QUnit dzieli się historią z TestSwarm (powyżej):
    QUnit został pierwotnie opracowany przez Johna Resiga jako część jQuery. W 2008 roku ma własny dom, nazwę i dokumentację API, pozwalając innym używać go do swoich również testy jednostkowe. W tym czasie nadal zależało od jQuery. Poprawiono to w 2009 r., teraz QUnit działa całkowicie autonomicznie. Metody twierdzenia QUnit są zgodne ze specyfikacją CommonJS Unit Testing, na którą w pewnym stopniu miała wpływ QUnit.

    Projekt domu: http://qunitjs.com/

    Sinon

    Kolejnym świetnym narzędziem jest sinon.js By Christian Johansen, autor Test-Driven JavaScript Development. Najlepsze opisany przez siebie:

    Samodzielne testy szpiegów, stubów i wyśmiewców dla JavaScript. No dependencies works z dowolnymi ramami testowania jednostkowego.

    Intern

    Strona internetowa Intern zapewnia bezpośrednie porównanie funkcji do innych frameworków testowych na tej liście. Oferuje on więcej funkcji po wyjęciu z pudełka niż jakikolwiek inny system testowania oparty na JavaScript.

    JEST

    [9]}Nowy, ale bardzo wydajny framework testowy. Umożliwia również testowanie oparte na migawkach, co zwiększa szybkość testowania i tworzy nową dynamikę w zakresie testowania

    Zobacz jedną z ich rozmów: https://www.youtube.com/watch?v=cAKYQpTC7MA

    Jeszcze lepiej: pierwsze kroki

     1474
    Author: gregers,
    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
    2018-08-29 05:33:04

    Spójrz na ramę do testów jednostkowych Dojo Object Harness (Doh) , która jest w zasadzie niezależną ramą do testowania jednostek JavaScript i nie ma żadnych zależności Dojo. Bardzo dobry opis znajduje się w jednostkowych testach aplikacji Web 2.0 przy użyciu ujęcia celu Dojo .

    Jeśli chcesz zautomatyzować testowanie interfejsu użytkownika ( bolesny punkt wielu programistów) - sprawdź doh.robot (chwilowy spadek. aktualizacja: inny link http://dojotoolkit.org/reference-guide/util/dohrobot.html ) i dijit.robotx (tymczasowy dół) . Ten ostatni jest przeznaczony do testów akceptacyjnych. Aktualizacja:

    Artykuły odniesienia wyjaśniają, jak z nich korzystać, jak emulować interakcję użytkownika z interfejsem użytkownika za pomocą myszy i / lub klawiatury oraz jak nagrać sesję testową, aby móc ją później automatycznie "odtwarzać".

     63
    Author: Eugene Lazutkin,
    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-08-25 18:30:41

    Chutzpah-A JavaScript Test Runner

    Stworzyłem projekt open source o nazwie Chutzpah, który jest runnerem testów jednostkowych JavaScript. Chutzpah umożliwia uruchamianie testów jednostkowych JavaScript z wiersza poleceń i z wnętrza Visual Studio. Obsługuje również działanie w serwerze ciągłej integracji TeamCity.

     34
    Author: Matthew Manela,
    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
    2015-06-04 20:22:00

    Sekcja JavaScript we wpisie w Wikipedii, Lista frameworków testowania jednostkowego , zawiera listę dostępnych opcji. Wskazuje, czy działają po stronie klienta, po stronie serwera, czy po obu stronach.

     26
    Author: Pete TerMaat,
    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-06-01 18:07:42

    BusterJS

    Istnieje również BusterJS od Christiana Johansena, autora Test Driven Javascript Development oraz frameworka Sinon. Ze strony:

    Buster.JS to nowy Framework testujący JavaScript. Testuje przeglądarkę, automatyzując testy w rzeczywistych przeglądarkach (think JsTestDriver), a także Node.testy js.
     14
    Author: Tauren,
    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
    2015-11-08 13:32:10

    Google-js-test:

    JavaScript testing framework wydany przez Google: https://github.com/google/gjstest

    • Niezwykle szybki czas uruchamiania i wykonywania testów, bez konieczności uruchamiania przeglądarka.
    • czyste, czytelne dane wyjściowe w przypadku zdanych i nieudanych testów.
    • a przeglądarkowy Test runner , który można po prostu odświeżyć ilekroć JS jest zmieniany.
    • Style i semantyka przypominające Google Test dla C++.
    • wbudowany framework, który wymaga minimalnego kodu boilerplate (np. nie $tearDown LUB $verifyAll) ze stylem i semantyką opartą na Google C++ Framework .

    Obecnie nie ma plików binarnych dla Windows

     10
    Author: user,
    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
    2017-01-05 14:30:10

    Używamy teraz Qunit z Pavlov i jstestdriver razem. Takie podejście działa dobrze dla nas.

    QUnit

    Pawłow, źródło

    JsTestDriver, źródło

     8
    Author: Tom Stickel,
    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
    2014-03-07 16:59:53

    Masz "działa na przeglądarce" jako pro, ale z mojego doświadczenia, że jest to przekręt, ponieważ jest powolny. Ale to, co czyni go cennym, to brak wystarczającej emulacji JS z alternatyw innych niż przeglądarka. Może być tak, że jeśli twój JS jest na tyle złożony, że wystarczy tylko test w przeglądarce, ale jest jeszcze kilka opcji do rozważenia:

    HtmlUnit: "ma dość dobrą obsługę JavaScript (która stale się poprawia) i jest w stanie pracować nawet z dość złożonym Ajaxem biblioteki, symulujące Firefoksa lub Internet Explorera w zależności od konfiguracji, której chcesz użyć."Jeśli jego emulacja jest wystarczająco dobra do użytku, będzie znacznie szybsza niż jazda przeglądarką.

    Ale może HtmlUnit ma wystarczająco dobrą obsługę JS, ale nie lubisz Javy? Wtedy może:

    Celerity : API Watir działające na JRuby wspierane przez HtmlUnit.

    Lub podobnie

    Schnell : kolejny wrapper JRuby HtmlUnit.

    Oczywiście jeśli HtmlUnit nie jest wystarczająco dobry i musisz prowadzić przeglądarkę, wtedy możesz rozważyć Watir do prowadzenia JS .

     6
    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 06:11:18

    YUI ma również Framework testowy . ten film od Yahoo! Teatr jest miłym wstępem, chociaż istnieje wiele podstaw o TDD z przodu.

    Ten framework jest ogólny i może być uruchamiany z dowolną biblioteką JavaScript lub JS.

     6
    Author: Matthew Taylor,
    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-02-26 11:03:25

    Możesz być również zainteresowany frameworkiem testów jednostkowych, który jest częścią qooxdoo , open source ' owego frameworka RIA podobnego do Dojo, ExtJS itp. ale z dość obszernym łańcuchem narzędzi.

    Wypróbuj internetową wersję testrunnera . Wskazówka: hit szarą strzałkę w lewym górnym rogu (powinny być bardziej oczywiste). Jest to przycisk "Odtwórz", który uruchamia wybrane testy.

    Aby dowiedzieć się więcej o klasach JS, które umożliwiają definiowanie testów jednostkowych, zobacz API online viewer .

    Aby zautomatyzować testowanie interfejsu użytkownika (w oparciu o Selenium RC), zapoznaj się z projektem Simulator.

     3
    Author: Andreas Ecker,
    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-28 19:54:34

    Powinieneś rzucić okiem na env.js . Zobacz Mój blog dla przykładu jak pisać testy jednostkowe z env.js.

     3
    Author: Aaron Digulla,
    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-02-25 10:18:13

    Dodaliśmy integrację JUnit do naszego generatora kodu Java to Javascript ST-JS ( http://st-js.org ). framework generuje odpowiednie Javascript zarówno dla testowanego kodu, jak i testów jednostkowych i wysyła kod do różnych przeglądarek.

    Nie ma potrzeby posiadania oddzielnego serwera, ponieważ Unit Test runner otwiera potrzebny port http (i zamyka go po zakończeniu testów). Framework manipuluje stosem Javy tak, aby nieudane twierdzenia były poprawnie wyświetlane przez Wtyczka JUnit Eclipse. Oto prosty przykład z jQuery i Mockjax:

    @RunWith(STJSTestDriverRunner.class)
    @HTMLFixture("<div id='fortune'></div>")
    
    @Scripts({ "classpath://jquery.js",
           "classpath://jquery.mockjax.js", "classpath://json2.js" })
    public class MockjaxExampleTest {
      @Test
      public void myTest() {
        $.ajaxSetup($map("async", false));
        $.mockjax(new MockjaxOptions() {
          {
            url = "/restful/fortune";
            responseText = new Fortune() {
              {
                status = "success";
                fortune = "Are you a turtle?";
              }
            };
          }
        });
    
        $.getJSON("/restful/fortune", null, new Callback3<Fortune, String, JQueryXHR>() {
          @Override
          public void $invoke(Fortune response, String p2, JQueryXHR p3) {
            if (response.status.equals("success")) {
              $("#fortune").html("Your fortune is: " + response.fortune);
            } else {
              $("#fortune").html("Things do not look good, no fortune was told");
            }
    
          }
        });
        assertEquals("Your fortune is: Are you a turtle?", $("#fortune").html());
      }
    
      private static class Fortune {
        public String status;
        public String fortune;
      }
    }
    
     3
    Author: alex.c,
    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-11-12 17:20:52

    MochiKit ma Framework testowy o nazwie SimpleTest, który wydaje się złapać. Oto wpis na blogu oryginalnego autora .

     2
    Author: p.campbell,
    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-07-22 16:12:39