2010-09-02 22 views
7

Mam kilka scenariuszy Ogórek, które działają z kapibara na projekcie, nad którym pracuję.Logowanie przez authlogic bez konieczności wypełniania formularza za każdym razem

Większość z tych scenariuszy rozpoczyna się od kroku "Biorę pod uwagę, że jestem zalogowany". Obecnie mój realizacja tego jest:

visit path_to('the login page') 
    fill_in('Username', :with => 'user') 
    fill_in('Password', :with => 'password') 
    click_button('Login') 

To działa prawidłowo, jednak staje się trochę czasu czasochłonne konieczności załadowania i wysłać formularz logowania przed każdym scenariuszu.

Czy istnieje sposób, aby po prostu skonfigurować sesję w tym kroku bez konieczności przechodzenia przez formularz za każdym razem?

Odpowiedz

0

można użyć Tło w cucumber..ie

Background: 
    Given I am a logged-in admin user 

że wyschnie swoje scenariusze.

http://github.com/aslakhellesoy/cucumber/wiki/background

+1

Dzięki za odpowiedź. Tak naprawdę to już miałem, problem polegał na implementacji tego kroku - fizyczna konieczność przesyłania formularza za każdym razem i wypełnianie strony była powolna i trochę niepotrzebna - wystarczy przetestować to tylko raz. W końcu rozwiązaliśmy to, blokując sesję użytkownika. – AlistairH

2

Trochę późno na show jak zwykle, ale to działa na mnie on Rails 3.0.10.

W features/support/authlogic.rb:

require "authlogic/test_case" 
World(Authlogic::TestCase) 
ApplicationController.skip_before_filter :activate_authlogic 
Before do 
    activate_authlogic 
end 

Następnie w features/step_definitions/user_sessions_steps.rb

Given /^I am already logged in$/ do 
    UserSession.create!(User.find_by_name!('user')) 
end 

Oczywiście, można przekazać nazwę użytkownika do definicji kroku, jeśli chcesz, aby zalogować się do konkretnego użytkownika.

Szczegółowe informacje znajdują się w tym blogu: http://laserlemon.com/blog/2011/05/20/make-authlogic-and-cucumber-play-nice/

+0

Straszliwy. Powinieneś przechodzić przez interfejs, aby to zrobić, tak jak powinieneś przechodzić przez interfejs dla praktycznie wszystkiego innego w testach integracyjnych - w przeciwnym razie nie testujesz swojej aplikacji. Nie zadzieraj z aplikacjami wewnętrznymi w testach integracyjnych. –

+2

Kiedy masz tysiące scen z ogórkiem, dodajesz dużo narzutów, aby uzyskać niewielkie korzyści. Bądź na tym pragmatyczny. – PhilT

+0

Nie sądzę, że pragmatyczne jest, aby testy integracyjne naruszały hermetyzację tego, co mają testować. To czyni je niebezpiecznymi i bezużytecznymi dla ich zamierzonego celu. Lepiej nie pisać żadnych testów, niż pisać niedokładne. –

0

Pożyczanie trick z innego gem auth Sorcery „s wiki: Integration Testing with Rspec, Capybara and Fabricator, używają:

page.driver.post(user_sessions_url, { username: user, password: password }) 

które zasadniczo wywołuje metodę user_sessions_controller#create, dlatego pewność, że argumenty się zgadzają. Tak więc dla mnie:

activate_authlogic 
page.driver.post(user_sessions_url, { user_session: { email: user.email, password: user.password } }) 

Szukałem tego przez kilka dni. i UserSession.create! nie był w stanie pracować dla mnie. Mimo, że jest to stare pytanie, jestem na Rails 4, mam nadzieję, że może pomóc innym też utknąć.