Ведение сессии с капибарой и Rails 3 - PullRequest
5 голосов
/ 19 января 2011

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

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

require 'integration_test_helper'

class SignupTest < ActionController::IntegrationTest

  test 'sign up' do  
    visit '/'
    click_link 'Sign Up!'
    fill_in 'Email', :with => 'bob@wagonlabs.com'
    click_button 'Sign up'
    assert page.has_content?("Password can't be blank")
    fill_in 'Email', :with => 'bob@wagonlabs.com'
    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, - это глобальный экран входа, а не домашняя страница администратора, как я ожидал (регистрация регистрирует вас). Что я тут не так делаю?

Ответы [ 2 ]

6 голосов
/ 19 января 2011

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

def login
  visit '/'
  fill_in 'Email', :with => 'bob@wagonlabs.com'
  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 голосов
/ 19 января 2011

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

...