2011-01-19 8 views
5

Tengo dos pruebas de capibara, la primera de las cuales se registra en un usuario, y la segunda, que está destinada a probar las funciones solo disponibles para un usuario que ha iniciado sesión.Mantenimiento de la sesión con Capybara y Rails 3

Sin embargo, no puedo hacer funcionar la segunda prueba ya que la sesión no se mantiene en todas las pruebas (como, aparentemente, debería ser).

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 

La página generada por la llamada save_and_open_page es la pantalla de inicio de sesión global, no la página de administración como me esperaba (los Registrar le conecta). ¿Qué estoy haciendo mal aquí?

Respuesta

6

La razón por la que esto sucede es que las pruebas son transaccionales, por lo que pierde su estado entre las pruebas. Para evitar esto, debe replicar la funcionalidad de inicio de sesión en una función y luego llamar de nuevo:

 
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

Cada prueba se ejecuta en un entorno limpio. Si desea realizar tareas comunes de configuración y desmontaje, defina los métodos setup y teardown como se describe en el Rails guides.

Cuestiones relacionadas