2012-01-02 9 views
9

Chcę zablokować zalogowanego użytkownika (z Devise/Warden) za pomocą rspec mocks w pakiecie testowym Capybara w mojej aplikacji Rails. Oszczędziłoby to mnóstwo czasu i oznaczałoby, że mój pakiet testowy może/będzie działał regularnie.Jak wykraść strażnika/eksploratora przy pomocy Rspec w teście Capybara

Wcześniej byłem w stanie to zrobić przy użyciu Authlogic przez gasząc mój model sesji z kodem jak poniżej:

def login(user) 
    user_session = mock_model(UserSession, {:user => user}) 
    UserSession.stub(:find).and_return(user_session) 
end 

Teraz używam opracowania, nie mam już dostępu do obiektu UserSession. A ponieważ używam kapibara do testowania mojego kodu, nie mam bezpośredniego dostępu do obiektu żądania, aby użyć wbudowanego w test programisty pomocnika dev212.

Moje pytanie brzmi: w jaki sposób mogę zasymulować zalogowanego użytkownika za pomocą kapibarów, narzędzi i specyfikacji, nie wymagając żadnego scenariusza z zalogowanym użytkownikiem, aby najpierw przejść do ścieżki rejestracji, wypełnić formularz, wysłać, odczekać w celu uzyskania odpowiedzi, a następnie przejdź do żądanej strony?

+1

Nie co pytasz, ale na wszelki wypadek [login.rb] (https://github.com/gitlabhq/gitlabhq /blob/master/spec/support/login.rb) i [sample_use.rb] (https://github.com/gitlabhq/gitlabhq/blob/master/spec/requests/dashboard_issues_spec.rb) – clyfe

+0

Dzięki za odpowiedź Mam już coś takiego, czego staram się uniknąć. Chociaż twój komentarz jest z pewnością pomocny dla tych przyszłych użytkowników, którzy mogą nie. – Schneems

Odpowiedz

15

Warden jest dostarczany z wbudowanymi pomocnikami testowymi. Pozwala na zalogowanie się bez konieczności używania interfejsu użytkownika w testach ogórka. Wystarczy dodać poniższe pliki do swojego projektu.

# features/support/warden.rb

Warden.test_mode! 
World Warden::Test::Helpers 
After { Warden.test_reset! } 

# features/step_definitions/user_steps.rb

Given /^I am logged in as a user$/ do 
    @current_user = User.create!(:username => 'user', :password => 'password') 
    login_as(@current_user, :scope => :user) 
end 

Use Wardens.test_mode! with Capybara

+0

Myślę, że to jest właściwy kierunek, ale nie mogę go uruchomić. Metody pomocnicze są wywoływane poprawnie, ale current_user et. al nadal nie wyświetlają się poprawnie w mojej aplikacji. Czy to działa dla ciebie? – Schneems

+2

Potrzebowałem określić mój bieżący zasięg 'login_as @current_user,: scope =>: user' dzięki za pomoc – Schneems

+1

Również dzięki za linkowanie do strony kapibara, faktycznie skończyłem pisanie tego^_^https://github.com/plataformatec/devise/wiki/How-To: -Test-with-Capybara/_history – Schneems

Powiązane problemy