Capybara + Devise - testowanie logowania

Witajcie.
Próbuję dokonać w teorii bardzo prostej rzeczy, mianowicie przetestować capybarą logowanie.
Test:

@u = Factory.create(:user) visit "/users/sign_in" fill_in "Login", :with => @u.login fill_in "Password", :with => @u.password click_button "user_submit" visit "/accounts" assert page.has_content?("Your Account")
Factory:

Factory.define :user do |u| u.login "user" u.password "user123123" u.password_confirmation "user123123" u.email "e@mail.com" end
No i niestety, otrzymuję informację “invalid email or password” (nie zdążyłem jeszcze przerobić flasha na informacje o loginie zamiast emailu).
Co dziwne, samo logowanie działa normalnie (tzn. gdy nie puszczam testów, a sam sobie sprawdzam (w środowisku developerskim,z identycznymi danymi jak te na testowym )
W czym może być problem? użytkownik napewno jest poprawnie zapisywany - doszedłem do tego, że ma nadawany id,więc napewno w bazie siedzi.
Z góry dzięki za pomoc

Jeżeli używasz Rspeca lub Test::Unit, to najprawdopodobniej masz włączone transactional fixtures. Jeżeli dodatkowo używasz selenium lub celerity, to odpalony w capybarze serwer korzysta z innego połączenia do bazy danych niż testy - stąd nie są widoczne dane w bazie (wszystko jest wykonywane używając transakcji).

Rozwiązania są 2:

  1. Wyłączyć transactional fixtures
  2. Jeżeli są to Railsy 3 i ActiveRecord, to można użyć hacka, który przygotował Jose: http://gist.github.com/470808. Dzięki niemu wszystkie procesy powinny korzystać z tego samego połączenia.

użyłem hacka od Jose, bangla idealnie, dzięki za pomoc;)

:slight_smile:

Przy okazji takie testy potrafią być sporo szybsze od tych z wyłączonymi transakcjami.