Post Drogusa w Dyskusjach przypomniał mi, że Cucumber+Webrat nie wystarczą mi do testowania moich aplikacji, które mają się bardzo opierać na AJAX.
Zastanawia mnie, jak powinienem sobie skonfigurować środowisko do pracy.
Załóżmy, że w firmie jest niewielu developerów (2-3) pracujących zdalnie. Z założenia każdy z nich ma dostać tak samo działająca skrzynkę (PC). Rozważam dwie opcje:
Na każdym komputerze zainstalowany Ruby i JRuby+Culerity. Każdy programista odpala testy integracyjne przed pushem do wspólnego, centralnego repozytorium.
Na każdym komputerze zwykły Ruby. Postawić 2 serwery. Jeden z JRuby+Culerity i z repozytorium testowym. Po każdym pushu do tego repo startują testy culerity (pytanie: jak wyprowadzić wyniki?). Szef projektu co jakiś czas robi pulla z repo testowego (o ile testy wszysktie ok) do repozytorium głównego, z którego można przeprowadzić deploya na serwery produkcyjne. IMHO wadą tego rozwiązania jest to, że programista nie może odpalić testów przed pushem ze swojego komputera.
Opcja 1 jest chwilowo dla mnie niedostępna. Pod Fedorą nie ma lekko, musiałbym z dostarczonych przez developerów targz instalować (jakis plugin w cucumberze wymaga jruby 1.3.0, a ww fedorze 11 mam jruby 1.1.6). Dość już napieszałem w systemie, by instalować 3cią wersję Rubiego
Żeby każdy mógł sobie odpalić testy u siebie i żeby było coninuous integration. W przypadku uruchamiania testów u siebie warto pamiętać, że cucumber pozwala na tagowanie, więc można aktualnie katowane scenariusze oznaczyć np. tagiem @focus, albo @current i odpalać tylko te scenariusze. A cały test suite raczej po commitach.
Nigdy nie instalowałem JRubiego z jakichś paczek. jruby “instaluje” się banalnie łatwo. Ściągasz paczkę, rozpakowujesz do jakiegoś katalogu (np. /opt/jruby) i dodajesz do PATH ścieżkę, np: export PATH=$PATH:/opt/jruby/bin (i to najlepiej wrzucić do .bashrc czy innego profile czy do jakiegokolwiek innego pliku, który się ładuje przy starcie).
I to właściwie cała filozofia, można też wtedy korzystać z jruby -S, żeby odpalić niektóre polecenia dla jruby, np:
jruby -S gem install ...
Dlatego olej paczki i ściągnij jrubiego
(tak, wiem, że jeszcze niedawno pastwiłem się nad windowsem właśnie za konieczność ręcznego ściągania czegokolwiek, ale to naprawdę jest jeden z niewielu wyjątków )
Hm, może głupie pytanie, ale srodowisko developerskie (jak sobie script/server robie) też na jruby? czy tylko w celu używania culerity?
Da się jakoś “uwspólnić” gemy obu interpreterów?
Krótko: Jest sens posiadania ruby i jruby i utrzymywania tych samych zestawów gemów?
Jeżeli nie masz zamiaru robić deploymentu na jruby, to tylko dla celerity (gem do testowania to celerity, culerity to proxy pomiędzy celerity i wersjami rubiego innymi niż jruby).
[quote]Da się jakoś “uwspólnić” gemy obu interpreterów?
Krótko: Jest sens posiadania ruby i jruby i utrzymywania tych samych zestawów gemów?[/quote]
Nie da się uwspólnić i nie ma takiej potrzeby. Ja mam jruby z zainstalowanym tylko celerity (+ zależności celerity)
Muszę tu od razu napisać, że culerity jest bardzo fajnym narzędziem, ale ma jedną dużą wadę - nie można używać metod z blokami, bo nie jest zaimplementowane przesyłanie bloków z procesu w ruby do procesu jruby. Wynika to głównie z tego, że bloki muszą posiadać kontekst, więc nawet jakby wykorzystać ruby2ruby, to i tak nie ma jak przesłać kontekstu. Pracowałem nad rozwiązaniem tego problemu i mam prawie gotowe rozwiązanie, ale nie miałem czasu tego dokończyć i stestować. Jak skończę to wrzucę to do swojego forka culerity i dam znać.
Nie, tu chodzi tylko i wyłącznie o metody celerity. Jakby nie dało się używać bloków w railsach przy używaniu celerity, to i tak by nic nie działało
Chodzi o sytuację np taką:
# chcemy w celerity kliknąć na linka i potwierdzić confirmation dialog, który wyskoczy po kliknięciu
browser.confirm(true) do
browser.link(:text, "Cośtam).click
end
culerity prześle do celerity odpalonego w jruby tylko:
browser.confirm(true)
co wywali error, że confirm, próbuje wykonać yield bez bloku.