Czy kątomierz i Karma mogą być używane razem?

Jeśli kątomierz zastępuje kątowy biegacz scenariuszowy do testów E2E, czy to oznacza, że nadal będę mógł go używać z Karma jako mojego frameworka testowego E2E ?

Author: Dmitri Zaitsev, 2013-06-12

2 answers

Nie zalecane przez obecnego opiekuna kątomierza:

Https://github.com/angular/protractor/issues/9#issuecomment-19927049

Kątomierz i Karma nie powinny być używane razem; zamiast tego zapewniają oddzielne systemy do przeprowadzania testów. Kątomierz i Karma obejmują różne aspekty testowania-Karma jest przeznaczona głównie do testów jednostkowych, podczas gdy kątomierz powinien być używany do testów end to end.

Kątomierz zbudowany jest na WebDriverJS, który używa serwera Selenium / WebDriver do obsługi przeglądarek i wykonywania testów. Przykłady czystego WebDriverJS można znaleźć tutaj: http://code.google.com/p/selenium/wiki/WebDriverJs

I

Https://github.com/angular/protractor/issues/9#issuecomment-19931154

Georgios-myślę, że to ma sens, aby zachować kątomierz i Karma oddzielnie - do testów end to end, chcesz natywne jazdy zdarzeń i elastyczność webdriver, podczas gdy dla testów jednostkowych potrzebujesz szybkiego wykonywania i automatycznego ładowania plików.

 95
Author: jack,
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-04-02 06:38:14

Aktualizacja. Oto Prosty pakiet, który stworzyłem , aby dodać minimalną konfigurację karmy do dowolnego projektu za pomocą jednego polecenia npm install min-karma.


Chciałbym wyjaśnić kilka możliwych nieporozumień na temat karmy i kątomierza. Karma FAQ W rzeczywistości odnosi się do adaptera do biegacza Scenario Runner, który jednak wydaje się być porzucony, a zamiast tego zalecany jest kątomierz {12]}.


Karma

Karma jest runnerem testowym, który uruchomi JavaScript Pliki określone w you configuration file jawnie lub używając node-globs. (For non-JavaScript external templates, Przewodnik testów jednostkowych Angular zaleca użycie preprocesora html Karma , aby skompilować je w JavaScript.)

Mogą to być Wszystkie Twoje pliki źródłowe, niektóre z nich, niektóre z nich plus niektóre dodatkowe pliki lub pliki nieistotne do twojego projektu, tylko pod warunkiem dodatkowej konfiguracji - nazwij to! Możesz mieć wiele plików konfiguracyjnych karmy do różnych celów, które możesz uruchamiać równolegle lub jeden po drugim. Każdy proces karmy uruchamia własny zestaw przeglądarek (są one obecnie dostępne).

Ta funkcja Z Karma aby uruchomić tylko zestaw plików jest tym, co czyni go idealnym do szybkich testów uruchomionych w tle przy każdej edycji pliku źródłowego i uzyskać natychmiastowa informacja zwrotna, która jest genialna! Jedynym negatywnym jest "hałaśliwe" raportowanie błędów, które miejmy nadzieję poprawi się!


Karma nie jest tylko do testów jednostkowych

Unit test {[7] } jest dla pojedynczej jednostki kodu źródłowego. W przypadku Angular typową jednostką jest Angular Component (Service, Factory, Provider, Controller, Filter, Directive etc). Pamiętaj, aby zachować Controllers cienkie, więc zbyt wiele testów jednostkowych dla latters jest czerwona flaga.

W teście jednostkowym , co pozostałe jednostki kodu, na których ta jednostka zależności (tzw. zależności jednostki) nie powinny być testowane w tym samym czasie. Zamiast tego powinny być "wyśmiewane", np. zastąpione czymś prostym, takim jak atrapy instancji. Angular zapewnia świetną obsługę środowiska makiety . Najlepiej, jeśli chcesz zobaczyć wszystkie te kpiny bezpośrednio w swoich testach, więc nigdy nie musisz się zastanawiać, skąd pochodzą wszystkie te zależności.

Karma jest równie przydatna dla testów integracyjnych , gdzie grupa jednostek kodu źródłowego jest testowane razem, tylko niektóre z ich zależności są wyśmiewane. Ważne jest, aby pamiętać, że każda zależność jest domyślnie dostarczana z modułów kodu źródłowego (tak długo, jak te moduły są wstrzykiwane bezpośrednio w testach, lub są zależnościami innych modułów wstrzykiwanych(w takim przypadku nie trzeba ich wstrzykiwać, ale nie zaszkodzi to zrobić). Wyśmiewane zależności nadpiszą dostarczone.

Bieganie szybko i często jest głównym cecha karmy . Oznacza to, że chcesz uniknąć żądań serwera, zapytań do bazy danych, czegokolwiek, co może trwać dłużej niż ułamki sekund. (inaczej nie będzie szybko!) te długie procesy to te, które chcesz wyśmiewać . Wyjaśnia to również, dlaczego błędną praktyką jest umieszczanie surowych usług niskiego poziomu, takich jak $http bezpośrednio w kontrolerach lub jakichkolwiek skomplikowanych jednostkach logiki biznesowej. Poprzez owijanie tych niskopoziomowych poza służbami komunikacyjnymi w mniejsze dedykowane serwisy, znacznie ułatwiasz ich "wyśmiewanie".

Co Karma does not do uruchamia Twoją witrynę tak, jak jest, czyli czym są testy End-to-End (E2E). Zasadniczo możesz użyć wewnętrznych metod Angular do odtworzenia strony lub jej elementów. Które, dla małych elementów, mogą być przydatne, i szybki sposób np. do testowania dyrektyw.

Jest jednaknie zalecanym sposobem wrzucania skomplikowanego kodu do testów. Im więcej robisz tym większa jest szansa, że popełnisz błędy w tym kodzie zamiast tego, co faktycznie testujesz.

Dlatego osobiście nie lubię często wspominanego skomplikowanego sposobu testowania metod przy użyciu metod niskiego poziomu, takich jak $http. Pozwala to wyodrębnić wszelkie odniesienia do metod niskiego poziomu na dedykowane metody własne, których jedyną odpowiedzialnością jest składanie żądań http. Te dedykowane metody powinny być w stanie pracować z rzeczywistym backend , nie fałszywy! Które można łatwo przetestować-ręcznie lub nawet doskonale z Karma uruchomiona z inny specjalny config, o ile nie mieszasz tej konfiguracji z tą zwykle używaną do uruchomienia Karma regularnie i szybko. Teraz, mając Przetestowane dedykowane małe usługi, możesz bezpiecznie i łatwo wyśmiewać je, aby przetestować swoją inną logikę i umieścić te testy w swojej zwykłej konfiguracji Karma.


podsumowując. użycie Karma aby uruchomić dowolny zestaw plików JavaScript. Jest (powinno być) szybkie. Nie widzisz pełnej aplikacji, więc nie możesz skutecznie i niezawodnie przetestować końcowego wyniku . Czy mogę uruchomić go z kątomierzem ? Dlaczego miałbym? Bieganie kątomierza spowolniłoby moje testy, pokonując cel karmy . Łatwo jest uruchomić kątomierz oddzielnie.


Kątomierz

Kątomierz jest:

Test end-to-end framework dla aplikacji AngularJS. Kątomierz uruchamia testy na Twojej aplikacji działającej w prawdziwej przeglądarce, wchodząc z nią w interakcję tak, jak zrobiłby to użytkownik.

Więc kątomierz robi dokładnie to, co} Karma nie uruchamia twojego prawdziwego końcowego zastosowania. To ujawnia zarówno jego moc, jak i ograniczenia: {]}

Uruchomienie kompletnej aplikacji jest jedynym wiarygodnym testem końcowym, że aplikacja działa zgodnie z oczekiwaniami. Możesz napisać kompletne scenariusze historii użytkownika i umieścić do Twoich testów!

Ale trudniej jest śledzić błędy bez izolowania poszczególnych jednostek kodu źródłowego. Dlatego nadal potrzebujesz karmy , aby najpierw przetestować swój kod JavaScript.


Teraz chciałbym uruchomić kątomierz z Karma ? Z pewnością mogę je uruchamiać w oddzielnych oknach terminala, równolegle. Mógłbym, w zasadzie, mieć je udostępniać pliki testowe, jeśli trzeba, ale normalnie wolałbym nie. Dlaczego? Ponieważ chcę zachować swoje testy mały z jednym dedykowanym przeznaczeniem.

Jedynym wyjątkiem byłby plik definiujący makra testowe przydatne dla obu biegaczy. Nie byłby to jednak plik testowy , lecz plik definicji makra .

Poza tym, lubię wyraźny rozdział między moimi testami. Te, które należy uruchamiać często i szybko, a te dla kompletnej aplikacji. Daje to wyraźną separację pomiędzy używaniem karmy a kiedy kątomierza .

 73
Author: Dmitri Zaitsev,
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
2016-05-15 02:45:18