Kilka miesięcy temu miałem te same pytania i po rozmowie z wieloma programistami i przeprowadzeniu wielu badań, dowiedziałem się o tym. Powinieneś przetestować swój JavaScript, napisać mały zestaw testów integracyjnych interfejsu użytkownika i unikać narzędzi do testowania rekordów i odtwarzania. Pozwól mi wyjaśnić to bardziej szczegółowo.
Najpierw należy wziąć pod uwagę test pyramid. To ciekawa analogia stworzona przez Mike'a Cohna, która pomoże ci zdecydować, jaki rodzaj testu powinieneś wykonać. Na dole piramidy znajdują się testy jednostkowe, które są solidne i zapewniają szybką reakcję. Powinny one stanowić podstawę twojej strategii testowej i tym samym zajmować największą część piramidy. U góry masz testy interfejsu użytkownika. Są to testy, które wchodzą w interakcję z twoim interfejsem użytkownika, jak na przykład Selenium. Chociaż te testy mogą pomóc Ci znaleźć błędy, są one droższe i zapewniają bardzo powolną informację zwrotną. Ponadto, w zależności od używanego narzędzia, stają się one bardzo kruche i ostatecznie spędzasz więcej czasu na utrzymaniu tych testów niż na pisaniu rzeczywistego kodu produkcyjnego. Warstwa usług w środku zawiera testy integracyjne, które nie wymagają interfejsu użytkownika. Na przykład w Railsach można bezpośrednio przetestować interfejs REST zamiast interakcji z elementami DOM.
Teraz wracam do pytania. Dowiedziałem się, że mogę znacznie zmniejszyć liczbę błędów w moim projekcie, który jest aplikacją internetową napisaną w Spring Roo (Java) z mnóstwem kodu JavaScript, wystarczy napisać wystarczającą liczbę testów jednostkowych dla JS. W moim zgłoszeniu jest dużo logiki napisanej w JS i to jest to, co testuję tutaj. Nie przejmuję się tym, jak strona będzie wyglądać lub czy animacje są odtwarzane tak, jak powinny. Testuję, czy moduły, które zapisuję w JS, wykonają oczekiwaną logikę, czy klasy elementów są poprawnie przypisane i czy warunki błędu są dobrze obsługiwane. Do tych testów używam Jasmine. To wspaniałe narzędzie. Jest bardzo łatwy do nauczenia i ma fajne szydercze zdolności, które nazywane są szpiegami. Jasmine-jQuery dodaje więcej doskonałej funkcjonalności, jeśli używasz jQuery. W szczególności pozwala określić urządzenia, które są fragmentami kodu HTML, dzięki czemu nie trzeba ręcznie kpić z DOM. Zintegrowaliśmy to narzędzie z mavenem, a testy te są częścią mojej strategii CI.
Musisz być ostrożny przy testach interfejsu użytkownika, szczególnie jeśli polegasz na narzędziach do nagrywania/odtwarzania, takich jak Selenium. Ponieważ interfejs użytkownika często się zmienia, testy te wciąż pękają, a ty poświęcasz dużo czasu na sprawdzenie, czy testy naprawdę się nie powiodły lub są po prostu nieaktualne. Ponadto nie dodają one tyle wartości, co testy jednostkowe. Ponieważ potrzebują one zintegrowanego środowiska do działania, najczęściej będziesz je uruchamiał dopiero po zakończeniu projektowania, gdy koszt naprawy będzie wyższy.
Dla testów dymu/regresji testy UI są jednak bardzo użyteczne. Jeśli chcesz je zautomatyzować, powinieneś uważać na pewne niebezpieczeństwa. Napisz swoje testy, nie nagrywaj ich. Nagrane testy zazwyczaj polegają na automatycznie generowanych ścieżkach x, które łamią się przy każdej niewielkiej zmianie w kodzie. Wierzę, że Cucumber to dobre ramy do pisania tych testów i można go używać wraz z WebDriver do automatyzacji interakcji przeglądarki. Kod myślenia o testach. W testach UI będziesz musiał łatwiej wyszukiwać elementy, więc nie musisz polegać na złożonych ścieżkach xpath. Dodanie elementów klasy i identyfikatora tam, gdzie zwykle nie byłoby to częste. Nie pisz testów dla każdego małego rogu. Te testy są kosztowne w pisaniu i trwają zbyt długo. Powinieneś skupić się na przypadkach, które eksplorują większość twoich funkcji. Jeśli napiszesz zbyt wiele testów na tym poziomie, prawdopodobnie przetestujesz tę samą funkcjonalność, którą wcześniej testowałeś na swoich testach jednostkowych (przypuść, że je napisałeś).
W moim bieżącym projekcie używam Spocka i Geb do napisania testów interfejsu użytkownika. Uważam te narzędzia za niesamowite. Są napisane w Groovy, co lepiej pasuje do mojego projektu Java.
Możesz uzyskać naprawdę dobrą poradę z książki [Ciągłe testowanie: z Ruby, Rails i JavaScript] (http://www.amazon.com/Continuous-Testing-Ruby-Rails-JavaScript/dp/1934356700) . Przeczytałem tę książkę około 6-8 miesięcy temu i miałem mnóstwo gadżetów o tym, jak używać jaśminu z węzłem, aby kpić z przeglądarki. Niestety nie miałem szansy zastosować go w praktyce. – Augusto
Interesujące może być uzyskanie, dzięki :) –