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.

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ą)

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


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)


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?


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
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.