16

Poszukałem trochę tego i spróbowałem zaimplementować samodzielnie wykonane rozwiązanie, ale jak dotąd nie znalazłem w nim pewności.Testowanie integracji JavaScript w Ruby on Rails

Potrzebuję pisać testy integracji w Ruby on Rails, które wchodzą w interakcję z JavaScriptem i otrzymują programowe sposoby potwierdzania pewnych zachowań. Używam Test :: Unit dla części kontrolera/modelu, ale próbuję przetestować niektóre zachowania jQuery/JavaScript używane przez moją aplikację. Głównie składa się z wywołań ajaxowych i interakcji w interfejsie użytkownika, który aktualizuje niektóre zestawy informacji.

Nie znalazłem rozwiązania, które by mnie przekonało, a które ładnie integruje się z autotestem i całym procesem czerwono-zielonym, więc na razie większość części mojego kodu po stronie klienta jest niesprawdzona i to mnie denerwuje (jak to powinno być: P).

Czy ktoś ma sugestie dotyczące najlepszych praktyk w tym zakresie? Testowanie jednostkowe JS jest nieco trudne, jak wskazuje Crockford, ponieważ zależy w dużym stopniu od aktualnego stanu interfejsu i itp., A jako AFAIK nawet on nie znalazł dobrego sposobu na wdrożenie przyzwoitych testów ...

Krótko : Muszę wdrożyć testy dla niektórych zachowań UI, które zależą od Ajax, integrując z autotestem lub innym narzędziem CI i nie znalazłem dobrego i eleganckiego sposobu na to.

Dzięki wszystkim za uwagę, pozdrawiam

Odpowiedz

3

W kwietniu 2011 r. Badbot guys updated their quest do testowania javascript. Akephalos wypadł z łask z następujących powodów:

Bugs: jak już wspomniano, istnieją błędy w temat przeglądarki HtmlUnit, specjalnie z jQuery na żywo. Mimo że wszystkie wersje przeglądarek zawierają błędy, jest to bardziej przydatne, jeśli testy doświadczają takich samych błędów jak rzeczywiste przeglądarki.

Kompatybilność: htmlunit nie w pełni implementuje zestaw funkcji, który są dostępne w nowoczesnych przeglądarkach pod numerami . Na przykład nie obsługuje on w pełni zakresów DOM ani przesłanych plików Ajax w formacie .

Renderowanie: htmlunit w rzeczywistości nie renderuje strony, więc testy, które są zależą od widoczności lub położenia CSS, nie będą działać.

Wydajność: gdy większość testów korzysta z JavaScript, zestawy testów z htmlunit rozpoczynają indeksowanie. Rozpoczyna się test z włączeniem Akephalos, a duży zestaw testów może z łatwością zająć 10 lub 15 minut.

Przetworzyli więc własne rozwiązanie o otwartym kodzie źródłowym - capybara-webkit. Jest wciąż całkiem nowy, ale wygląda na to, że teraz mamy iść.

4

AFAIK, poza połączeniem Capybara z Selenium Web-Driver istnieje bardzo niewiele opcji do automatycznego testowania kodu JS. Używam ogórka z kapibarowym i selenowym web-driverem, a ponieważ selenowy-webdriver faktycznie uruchamia firefox lub chrome, aby przejść przez testowanie konkretnej strony z wywołaniem ajaxa, to trwa znacznie dłużej, aby przejść przez zestaw testów.

Istnieje kilka alternatyw, ale nie działają one cały czas lub w każdej sytuacji. Na przykład: Capybara with envjs

+0

Dzięki za link do Capybara-envjs! Czy można to wykorzystać poza światem Railsów (na przykład we wszystkich starszych aplikacjach internetowych)? –

2

Użyłem ogórka i kapibary z selenem. Było to bardzo frustrujące, ponieważ selen wydawał się nie widzieć dynamicznie generowanego javascriptu, pomimo tego, że kapibara miała na niego czekać. To było w styczniu 2011 roku. Teraz może być inaczej.

Obecnie używam ogórka i kapibara z akephalos. Do tej pory było to bardzo trudne, ponieważ 1. jest bez głowy, więc nie widać postępu. Wywołanie "save_and_open" Capybara pomogło w pewnym stopniu. 2. jQuery i akephalos nie wydają się ładnie grać razem. Na przykład, wyzwalanie na przycisku radiowym z jQuery .change() działa dobrze w chrome, ale nie w akephalos. Może to jest celowe, ponieważ później dowiedziałem się, że to nie działa w IE. Naprawiłem problem, używając przycisku .click() zamiast .change() dla przycisku radiowego, ale ponieważ funkcja .change została skonfigurowana do uruchamiania na kilka pytań, musiałem napisać kod, aby uruchomić go do testu .

Najważniejsze dla mnie jest to, że zautomatyzowane testy akceptacji javascript w env rails jest wciąż niedojrzałe i prawdopodobnie więcej pracy, która jest warta.