2011-01-19 8 views
5

Mam dwa testy kapibara, z których pierwszy podpisuje się w użytkowniku, a drugi, który ma testować funkcje dostępne tylko dla zalogowanego użytkownika.Utrzymanie sesji z Capybara i Rails 3

Jednak nie jestem w stanie wykonać drugiego testu, ponieważ sesja nie jest utrzymywana podczas testów (tak jak powinno być).

require 'integration_test_helper' 

class SignupTest < ActionController::IntegrationTest 

    test 'sign up' do 
    visit '/' 
    click_link 'Sign Up!' 
    fill_in 'Email', :with => '[email protected]' 
    click_button 'Sign up' 
    assert page.has_content?("Password can't be blank") 
    fill_in 'Email', :with => '[email protected]' 
    fill_in 'Password', :with => 'password' 
    fill_in 'Password confirmation', :with => 'password' 
    click_button 'Sign up' 
    assert page.has_content?("You have signed up successfully.") 
    end 

    test 'create a product' do 
    visit '/admin' 
    save_and_open_page 
    end 

end 

Strona generowane przez wywołanie save_and_open_page jest światowym ekran logowania, a nie jako strona Administrator spodziewałbym (dzienniki zarejestruj konto was w). Co ja tu robię źle?

Odpowiedz

6

Powodem tego jest to, że testy są transakcyjne, więc tracisz swój stan między testami. Aby obejść ten problem, należy zreplikować funkcję logowania w funkcji, a następnie ponownie ją wywołać:

 
def login 
    visit '/' 
    fill_in 'Email', :with => '[email protected]' 
    fill_in 'Password', :with => 'password' 
    fill_in 'Password confirmation', :with => 'password' 
    click_button 'Sign up' 
end 

test 'sign up' do 
... 
login 
assert page.has_content?("You have signed up successfully.") 
end 

test 'create a product' do 
    login 
    visit '/admin' 
    save_and_open_page 
end 
3

Każdy test jest przeprowadzany w czystym środowisku. Jeśli chcesz wykonywać typowe zadania konfiguracji i rozłączania, zdefiniuj metody setup i teardown zgodnie z opisem w Rails guides.

Powiązane problemy