2011-01-19 2 views
5

J'ai deux tests capybara, le premier qui signe dans un utilisateur, et le second qui est destiné à tester des fonctions disponibles uniquement pour un utilisateur connecté.Maintenance de session avec Capybara et Rails 3

Cependant, je ne suis pas en mesure de faire fonctionner le second test car la session n'est pas maintenue entre les tests (comme, apparemment, il devrait l'être).

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 page générée par l'appel save_and_open_page est l'écran de connexion globale, pas la page d'accueil admin comme je vous attendre (les journaux d'inscription dans). Qu'est-ce que je fais mal ici?

Répondre

6

La raison pour laquelle cela se produit est que les tests sont transactionnels, de sorte que vous perdez votre état entre les tests. Pour contourner ce problème, vous devez répliquer la fonctionnalité de connexion dans une fonction, puis la rappeler:

 
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

Chaque test est exécuté dans un environnement propre. Si vous souhaitez effectuer des tâches courantes de configuration et de démontage, définissez les méthodes setup et teardown comme décrit dans Rails guides.

Questions connexes