Testy integracyjne z Rspec2 i niedziałający filtr before

Witam
Mam taki test:

describe "AdminLayoutLinks" do before(:all) do user = Factory(:user, :admin => true, :email => "testadmin@example.com") visit root_path fill_in "session[email]", :with => user.email fill_in "session[password]", :with => user.password click_button end (...) end
Przy pierwszym wykonaniu wszystkie testy przechodzą, ale przy następnych przebiegach dostaję za każdym razem

Failure/Error: user = Factory(:user, :admin => true, :email => "testadmin@example.com") Negatywne sprawdzenie poprawności: Adres e-mail Podany adres e-mail został już zajęty
Co mam tu poprawić?

Musisz wyczyścić bazę. Nie przechodzi walidacja użytkownika, bo już taki w bazie istnieje. Przy okazji, ja bym użył before(:each), żeby w każdym teście ten user nie był tym samym rekordem w bazie.

Aha, moje myślenie szło w tą stronę, że jak użyję before(:all) to akcja się wykona raz przed wszystkimi testami i potem nie będzie problemu z nakładającymi się emailami. Jak się okazuje, myślałem źle. Może wynika to też z tego, że nie do końca rozumiem działanie factory_gir. Dzięki.

Nie, before :all wykona się raz, przed każdym z kontekstów/zestawem testów.

Różnica często niedostrzegana jest taka, że każdy przykład jest otoczony blokami before i after :each i wykonują się one w transakcji, która jest później cofana. Blok :all jest wykonywany poza transakcją i stąd jest potrzeba usunięcia utworzonego właśnie rekordu w bloku after(:all).

HOWEVER jest to bardzo niezalecane - czytaj ostatnią sekcję http://rspec.info/documentation/before_and_after.html