Warte uwagi: pickle
W sekcji “Warte uwagi” prezentujemy narzędzia, biblioteki, gemy, pluginy, które naszym zdaniem na uwagę zasługują, a być może nie są dobrze znane i doceniane wśród developerów. Nie będzie tu dogłębnych tutoriali – tylko kilka słów na zaciekawienie i zaostrzenie apetytu.
W dzisiejszym odcinku: pickle
Co to?
Pickle to gem, który znacznie ułatwia pisanie scenariuszy Cucumbera dla aplikacji railsowych. Nie da się ukryć, że “ogórki” w RoR bywają do siebie podobne. Jest sobie użytkownik, loguje się, klika w przycisk i na końcu widzi napis “Dziękujemy”. Lwią część tych kroków dostajemy za darmo od cucumber-rails – w szczególności wszystkie typu When
symulujące interakcję użytkownika z aplikacją i kilka kroków Then
sprawdzających zawartość strony po wykonaniu akcji. Pozostaje jednak sporo Givenów
i Thenów
, które trzeba zdefiniować samemu.
Chyba, że użyjemy pickle.
Jak to?
Instalacja to 3 kroki:
- dodanie wpisu
config.gem
wenvironments/cucumber.rb
- instalacja gema
- odpalenie generatora
script/generate pickle
Od tego momentu możemy pisać takie cuda:
Given a user: "Ala" exists with email: "ala@makota.pl" And another user: "Marek" exists with email: "marek@zegarek.pl" And an admin exists with email: "site@admin.com" And user: "Ala" is in that admin's contacts ... ... Then 0 users should exist with email: "marek@zegarek.pl" But a user should exist with email: "ala@makota.pl" And that user should be happy
Wszystkie powyższe kroki pickle “zrozumie” i obsłuży jak swoje. Wystarczy, że mamy odpowiednie modele i/lub fabryki, pierwsze cztery Giveny przygotują stan “przed”, a trzy ostatnie Theny sprawdzą stan “po”.
Ten mało wyszukany przykład to dopiero początek. Polecam przejrzeć dokumentację i rzucić okiem na multum form, które akceptuje pickle.
Warto wiedzieć
Choć dokumentacja sugeruje, że moduły paths
i email
są opcjonalne, zdecydowanie polecam dołączenie ich bez zastanowienia. Generator pickle’a jest bardzo ostrożny z nadpisywaniem plików, a dodatkowe funkcjonalności z tych modułów są warte zachodu.
Od razu polecam też odkomentować linię w pickle.rb
:
config.map 'I', 'myself', 'me', 'my', :to => 'user: "me"'
Dzięki temu możemy używać zamiennie określeń “I”, “me” itd, a kolejne kroki będą wiedziały o którym użytkowniku mowa.
Pickle świetnie współpracuje z fabrykami Factory Girl lub Machinist. Powyższy przykład z użytkownikami i adminem to w najprostszym przypadku jeden model User
i dwie fabryki: user
i admin
, obie powiązane z tym modelem, a różniące się np. tylko flagą admin
lub polem status
.
Wszystkie potrzebne informacje – na stronie projektu: http://github.com/ianwhite/pickle