Jeśli Protractor zastępuje Angular Scenario Runner do testowania E2E, czy to oznacza, że nadal będę mógł go używać z Karmą jako moją platformą testową E2E?
javascript
angularjs
testing
protractor
karma-runner
zasada holograficzna
źródło
źródło
Odpowiedzi:
Niezalecane przez obecnego opiekuna Protractora:
I
źródło
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 błędnych przekonań na temat Karmy i Kątomierz . Karma FAQ faktycznie odnosi się do Adapter for Angular's Scenario Runner , który jednak wydaje się być porzucony, a zamiast tego zalecany jest Protractor .
Karma
Karma to program uruchamiający testy, który będzie uruchamiał pliki JavaScript określone w twoim pliku konfiguracyjnym jawnie lub za pomocą node-globs . (W przypadku zewnętrznych szablonów innych niż JavaScript , przewodnik po testach jednostkowych Angular zaleca użycie preprocesora Karma html do skompilowania ich najpierw do JavaScript.
Mogą to być wszystkie twoje pliki źródłowe, niektóre z nich, niektóre z nich plus dodatkowe pliki lub pliki nieistotne dla twojego projektu, zapewniające tylko dodatkową konfigurację - możesz to nazwać! 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 cecha stanowi Karmy uruchomić tylko zestaw plików , co czyni go idealnym do szybkich testów uruchomiony w tle po każdej edycji pliku źródłowego i uzyskać natychmiastową informację zwrotną, która jest genialna! Jedynym minusem jest „głośne” raportowanie błędów, które, miejmy nadzieję, ulegnie poprawie!
Karma to nie tylko testy jednostkowe
Test jednostkowy dotyczy pojedynczej jednostki kodu źródłowego. W przypadku Angulara typową jednostką jest komponent kątowy (
Service, Factory, Provider, Controller, Filter, Directive
itp.). Pamiętaj, aby zachowaćControllers
szczupłość, więc zbyt wiele testów jednostkowych dla ostatnich to czerwona flaga .W teście jednostkowym nie powinny być testowane jednocześnie wszystkie inne jednostki kodu, od których ta jednostka zależy (tzw. Zależności jednostek). Zamiast tego powinny być „wyszydzane”, np. Zastąpione przez coś prostego, np. Atrapy. Angular zapewnia doskonałą obsługę makiety . Idealnie byłoby, gdybyś chciał zobaczyć wszystkie te makiety bezpośrednio w swoich testach, więc nigdy nie musisz się zastanawiać, skąd pochodzą te wszystkie zależności.
Karma jest równie przydatna w testach integracji , w których grupa jednostek kodu źródłowego jest testowana razem, a tylko niektóre z ich zależności są mockowane. Należy pamiętać, że każda zależność jest domyślnie dostarczana z modułów kodu źródłowego (o ile te moduły albo są wstrzykiwane bezpośrednio w twoich testach , albo są zależnościami innych wstrzykniętych modułów (w takim przypadku nie musisz ich wstrzykiwać , ale bez szkody) .Zmokowane zależności zastąpią te dostarczone.
Bieganie szybko i często to główna cecha Karmy . Oznacza to, że chcesz uniknąć żądań serwera, zapytań do bazy danych, wszystkiego, co może zająć więcej niż ułamki sekund. ( W przeciwnym razie NIE będzie to szybkie! ) Te długie procesy to te, z których chcesz kpić . Wyjaśnia to również, dlaczego złą praktyką jest umieszczanie surowych usług niskiego poziomu, takich jak
$http
bezpośrednio wewnątrz kontrolerów lub jakichkolwiek skomplikowanych jednostek logiki biznesowej. Pakując te niskopoziomowe zewnętrzne usługi komunikacyjne w mniejsze dedykowane usługi, znacznie łatwiej jest je „wyszydzać”.To, czego Karma nie robi, to prowadzenie witryny w takiej postaci, w jakiej jest, czyli testowanie typu End-to-End (E2E). Zasadniczo możesz użyć wewnętrznych metod Angulara, aby odtworzyć witrynę lub jej fragmenty. Które dla małych kawałków mogą być przydatne i szybkie np. Do testowania dyrektyw.
Nie jest to jednak zalecany sposób wrzucania skomplikowanego kodu do testów. Im częściej to robisz, tym większa szansa, że popełnisz błędy w tym kodzie, a nie w tym, co faktycznie testujesz.
Dlatego osobiście nie lubię często wspominanego skomplikowanego sposobu testowania metod niskopoziomowych, takich jak
$http
. Wyodrębnienie wszelkich odwołań do metod niskiego poziomu do własnych, dedykowanych metod , których jedynym obowiązkiem jest wykonywanie żądań http, działa czyściej . Te dedykowane metody powinny działać z prawdziwym zapleczem , a nie fałszywym! Które możesz łatwo przetestować - ręcznie lub nawet idealnie, jeśli Karma działa z inną specjalną konfiguracją , o ile nie mieszasz tej konfiguracji z tą zwykle używaną do uruchamiania Karmyregularne i szybkie. Teraz, po przetestowaniu dedykowanych małych usług, możesz bezpiecznie i łatwo z nich kpić, aby przetestować inną logikę i umieścić te testy w swojej zwykłej konfiguracji Karma .Podsumowując. Użyj Karmy, aby uruchomić dowolny zestaw plików JavaScript. To jest (powinno być) szybkie. Nie widzisz całej aplikacji, więc nie możesz skutecznie i niezawodnie przetestować końcowego wyniku . Czy uruchomiłbym to z Protractorem ? Dlaczego miałabym? Uruchomienie Protractora spowolniłoby moje testy, pokonując cel Karmy . Kątomierz można łatwo uruchomić oddzielnie.
Kątomierz
Kątomierz to:
Tak więc Protractor robi dokładnie to, czego nie robi Karma - uruchamia Twoją ostateczną aplikację. To ujawnia zarówno jego moc, jak i ograniczenia:
Uruchomienie kompletnej aplikacji to jedyny wiarygodny test końcowy, w którym aplikacja działa zgodnie z oczekiwaniami. Możesz napisać kompletne scenariusze historyjek użytkownika i umieścić je w swoich testach!
Ale trudniej jest śledzić błędy bez izolowania poszczególnych jednostek kodu źródłowego. Dlatego nadal potrzebujesz Karmy, aby najpierw przetestować kod JavaScript.
Czy teraz chciałbym uruchomić Protractora z Karmą ? Z pewnością mogę je uruchomić równolegle w osobnych oknach terminala. W zasadzie mógłbym poprosić ich o udostępnienie plików testowych, jeśli zajdzie taka potrzeba, ale normalnie wolałbym tego nie robić. Czemu? Ponieważ chcę, aby moje testy były małe i miały jeden cel.
Jedynym wyjątkiem byłby plik definiujący makra testowe przydatne dla obu runnerów. Nie byłby to jednak plik testowy, ale plik definicji makr .
Poza tym lubię wyraźne oddzielenie moich testów. Te, które mają być uruchamiane często i szybko, oraz te dla całej aplikacji. To wyraźnie rozdziela użycie Karmy i Kątomierz .
źródło
Karma to tester dostarczony przez zespół Angular, Karma wykona Twoje testy w wielu przeglądarkach, co zapewni kompatybilność naszej aplikacji ze wszystkimi przeglądarkami. Test jednostkowy dla kątowego js może być użyty karma + jaśmin
Jasmine to platforma do testowania jednostkowego javascript i zapewni nam narzędzia do testowania naszej aplikacji. Działa to najlepiej na frameworku Angular, dlatego też wybieramy „zautomatyzowane narzędzie do testowania jednostkowego”. https://github.com/shahing/testingangularjs
Protractor to kompleksowe środowisko testowe dla aplikacji Angular i AngularJS. Protractor przeprowadza testy aplikacji działającej w prawdziwej przeglądarce, przeglądarkach bezgłowych, testach między przeglądarkami i może być hostowany na saucelabs.
https://github.com/shahing/Protractor-Web-Automation
źródło
Tak, możesz używać razem karmy i kątomierza. Karma służy do testowania jednostkowego komponentu, który utworzyłeś za pomocą polecenia kątowego, możesz przetestować te komponenty za pomocą karmy. Kątomierz służy do testu od końca do końca. Jest używany głównie do testowania interfejsu użytkownika.
źródło