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 w environments/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