2011-01-19 5 views
5

У меня есть два теста capybara, первый из которых - у пользователя, а второй - для тестирования функций, доступных только для зарегистрированных пользователей.Поддержание сеанса с Capybara и Rails 3

Однако, я не могу получить второй тест, поскольку сеанс не поддерживается во всех тестах (как, по-видимому, он должен быть).

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 

страница генерируется вызовом save_and_open_page является глобальным Войти экран, не админ страницу, как я хотел бы ожидать (регистрацию регистрирует вас). Что я здесь делаю неправильно?

ответ

6

Причина, по которой это происходит, заключается в том, что тесты являются транзакционными, поэтому вы теряете свое состояние между тестами. Чтобы обойти это, вам необходимо реплицировать функции входа в функцию, а затем снова позвонить:

 
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

Каждый тест выполняется в чистой окружающей среде. Если вы хотите выполнять общие задачи по настройке и разрыву, определите методы setup и teardown, как описано в разделе Rails guides.

Смежные вопросы