Karma a ramy testowe Jasmine, Mocha, QUnit [zamknięte]

258

Kilka pytań:

  • Jak karma i ramy testowe X (Jasmine, Mocha, QUnit) odnoszą się do siebie?
  • Jaka jest równoważna struktura w świecie Java? Zakładam, że Jasmine, Mocha, QUnit równa się jUnit / TestNG. Co powiesz na Karmę?
  • Czy mogę uruchomić testowanie frameworka X (np. Jasmine) bez Karmy?
  • Czy Karma jest testem jednostkowym, czy testem integracyjnym / e2e? To odniesienie pokazuje test jednostkowy, ale to dotyczy testu e2e.
Lee Chee Kiam
źródło
Uruchamiamy

Odpowiedzi:

419

Karma to program uruchamiający testy przeglądarki.

Chodzi o to, że przeglądarki nie mają natywnej koncepcji ładowania plików testowych, uruchamiania ich i raportowania wyników. To, co robi karma, to (z grubsza):

  • uruchomienie małego serwera WWW do obsługi testowanych plików javascript po stronie klienta (1)
  • obsługują również pliki javascript po stronie klienta z testami (lub specyfikacjami, jak często się je nazywa) (2)
  • wyświetlaj niestandardową stronę internetową, na której będą uruchamiane kody javascript do testów (3)
  • uruchom przeglądarkę, aby załadować tę stronę (4)
  • zgłoś wyniki testu do serwera (5)
  • karma może następnie ponownie zgłosić wyniki do plików tekstowych, konsoli, wszystkiego, co lubi serwer CI itp.

Patrząc na każdą część:

(1) Te pliki będą twoimi rzeczywistymi plikami js; powiesz karmie, jak je załadować. Jeśli korzystasz z wymagań, istnieje wtyczka karmy i potrzebna jest pewna konfiguracja.

(2) Testy te można napisać w różnych ramach testów JavaScript (Jasmine, QUnit, Mocha); jest to kod JS uruchamiany w przeglądarce.

(3) Niestandardowa strona internetowa będzie nieco inna dla każdej platformy testowej; dlatego karma ma wtyczki do różnych frameworków.

(4) Karma może uruchomić stronę w wielu przeglądarkach (FF, Chrome lub przeglądarkach bezgłowych, takich jak PhantomJs).

(5) Ponowne zgłaszanie się do karmy jest zależne od ram i dotyczy wtyczek karmy.

Aby odpowiedzieć na twoje pytania:

  • w Javie większość ludzi korzysta z JUnit, który jest zarówno strukturą do pisania testów i ich uruchamiania, ale nie ma problemu z rozróżnieniem środowiska, w którym testy są uruchamiane, i środowiska, w którym raporty z testów są agregowane; karma byłaby brakującym elementem między pakietem JUnit a narzędziem JUnit TestRunner
  • Tak, możesz robić wszystko, co karma robi „ręcznie” - wybierz jeden szkielet (jaśmin, qunit, mokka) i postępuj zgodnie z instrukcjami. Zaletą karmy jest to, że zapewnia ona gotowe rozwiązanie, jeśli jesteś w standardowej konfiguracji.
  • Karmy można używać zarówno do testów jednostkowych (z jaśminem / qunit / czymkolwiek), jak i testów integracyjnych (które będą używać innego interfejsu API, takiego jak webdriver, do sterowania przeglądarką)
phtrivier
źródło
59
To zasługuje na wpis na blogu lub coś takiego.
Willa
Karma może uruchomić stronę w wielu przeglądarkach (FF, Chrome lub przeglądarkach bezgłowych, takich jak PhantomJs.)? więc czy Jasmine ma rację? możemy przetestować go na wielu platformach i wybrać tę konfigurację w conf js
Wang'l Pakhrin
1
@ Wang'lPakhrin Możesz oczywiście używać jaśminu w (m) dowolnej przeglądarce. Miałem na myśli to, że technicznie karma może uruchomić (m) dowolne przeglądarki, w których chcesz przetestować. W momencie pisania tego tekstu jaśmin nie był odpowiedzialny za faktyczne uruchomienie przeglądarek (nadal nie sądzę, żeby tak było). Mam nadzieję, że to wyjaśni!
phtrivier
thejsguy.com/2015/01/12/jasmine-vs-mocha-chai-and-sinon.html „Jasmine vs. Mocha, Chai i Sinon”
uciekł
1
@Willa Zrobiłem vid youtube na podstawie tej odpowiedzi youtube.com/watch?v=bJc078szrZA :)
bersling
70

Jeden krótszy sposób na zrozumienie różnicy:

Osoby testujące za pomocą zwykłego Jasmine / Mocha najprawdopodobniej uruchamiają cały kod na maszynie wirtualnej Node.

Dodanie Karmy do miksu (na wierzchu istniejącego wyboru) uruchomi zestaw testów z silnikiem innych przeglądarek.

W ten sposób otrzymujesz małe dodatki, które otrzymujesz dzięki środowisku przeglądarki. Łatwiej będzie przetestować kod związany z DOM, ale zrezygnujesz również z dodatkowych zasobów udostępnionych przez silnik Node (takich jak dostęp do systemu plików / powłoki)

SystematicFrank
źródło
34

Teza faceta, który zaprojektował Karmę, była bardzo pouczająca w opisywaniu istniejących rozwiązań i porównywaniu ich oraz oczywiście w opisie samej Karmy

https://github.com/karma-runner/karma/blob/master/thesis.pdf

Podsumowanie: Karma jest biegaczem testowym. Może być używany przez QUnit, Jasmine, Mocha, ... Karma ma zalety w stosunku do innych testerów, aby poprawić cykl rozwoju TDD / BDD. „Obserwuje” pliki, więc kiedy zapiszesz zmianę, Karma uruchamia testy i natychmiast się odsyła, bez przełączania kontekstu do przeglądarki internetowej, aby uruchomić test.

Krótko mówiąc, być może pytanie powinno brzmieć Karma ORAZ Jasmine, Mocha lub QUnit?

mauricio777
źródło
2
Czy możesz podać małe podsumowanie z linku? To poprawia twoją odpowiedź
winner_joiner
1
Czy karma może przeprowadzać testy Jest?
SuperUberDuper,
możesz też oglądać w Jasmine? tak myślę, ale nie cicho pamiętam.
Wang'l Pakhrin
@ Wang'l Pakhrin Nie wiem, czy Jasmine ma funkcję zegarka, po prostu używam nodemona. „nodemon --exec jasmine” i za każdym razem, gdy zapiszesz plik, uruchomi testy.
snowfrogdev
Teza nie wspomina o Jasmine.
Carl G