Gdy programuję w Ruby to do testowania wykorzystuję Rspec. Jednak testy, które piszę nie są zbyt wysokich lotów. Nigdy nie skupiałem się zbytnio nad dodatkowymi funkcjonalnościami tego narzędzia i co prawda efekt osiągałem, lecz było to odkupione dłuższym pisaniem. Natura moja jest leniwa więc zaczęła się bronić. Musiałem trochę więcej czasu spędzić nad lekturą dokumentacji aby teraz to zapunktowało krótszym i bardziej czytelniejszym kodem.

Pierwszą funkcjonalnością jest before. Możemy ją wykorzystywać na każdym
poziomie zagnieżdżenia.

Powyższy przykład za: tym tutorialem.

Po uruchomieniu testu rspec this_spec.rb -cf nested otrzymamy mniej
więcej taki wynik:

Jak widać w każdym teście model user jest tworzony na nowo. W tym
przykładzie jest to tylko wywoałanie User.new jednak tworzony model
jest trochę bardziej skomplikowany. W takim przypadku tworzenie modelu
możemy przenieść do oddzielnego bloku, na przykład tak:

Wynik wykonania będzie taki sam a już mamy trochę mniej do pisania. No
tak, ale musimy w każdym teście używać tego modelu. Czy aby na pewno?
Na ratunek przychodzi nam subject.

Subject pozwala na dopasowanie matcherów do określonego podmiotu.
Najpiękniejsze, że nie musi to być sam model ale także jego dane pole.
Jeżeli mamy w danym kontekście kilka testów sprawdzających name danego modelu możemy
użyć:

i wszystkie matchery w tym bloku będą się odnosić do tego właśnie pola.

W ostatnim paragrafie wspomniałem o kontekście? No właśnie, context
jest blokiem, który grupuje kilka testów, może w nim użyć oddzielny blok
before lub subject, które bedą się odnosić tylko do tego bloku.

Możemy także trochę uprościć blok it. Możemy go skrócić do bloku
inline porzucając załączony opis. RSpec sprawnie matcher zamieni na opis
testu więc output powinien być dość czytelny. Aby jednak zachować w
miarę poprawną składnię językową otaczające konteksty powinny zaczynać
się od with lub when.

Efekt końcowy testu jest taki:

Output wychodzi mniej więcej taki:

Czysto i czytelnie. Mimo że w powyższym przykładzie nie widać do końca
różnicy to przy dłuższych testach jest ona wyraźna.

Ostatnie co zostało do omówienia to specify . Blok ten może być
używany zamiast it. Zamienia się je zwłaszcza wtedy, gdy nie potrzebny
jest żaden opis.

.