2010-11-25 33 views
0

J'utilise des rails avec authlogic pour me connecter. J'essaie d'écrire un test d'intégration pour me déconnecter avec rspec et webrat. Le problème que je vois est que webrat semble avoir un comportement différent de celui que je fais quand je clique. Donc, je peux me connecter et me déconnecter quand je clique sur mon navigateur, mais le webrat semble incapable de se déconnecter. Je diagnostique ceci parce que je montre seulement le lien de déconnexion si vous êtes connecté, mais il est toujours trouvé par webrat après avoir cliqué sur la déconnexion.Echec du test de déconnexion avec webrat, Rails avec Authlogic

Voici mon code de test

describe "when not signed in" do 
    it "should have a sign in link" do 
     visit root_path   
     response.should have_tag("a[href=?]", login_path, "Log In") 
    end       
    end 

    describe "when signed in" do 
    before :each do    
     @user = Factory(:user) 
     visit login_path   
     fill_in :user_session_email, :with => @user.email 
     fill_in :user_session_password, :with => @user.password 
     click_button 
    end 

    it "should have a log out button" do 
     visit root_path   
     response.should have_tag("a[href=?]", logout_path, "Log Out") 
    end 

    # This is the test that's failing                                           
    it "we should be able to log out" do 
     visit root_path 
     click_link /log out/i 
     response.should render_template('merchant_pages/home') 
     #this next line is the one that fails 
     #I've played around with this, and the log out link is still there 
     response.should have_tag("a[href=?]", login_path, "Log In") 
    end 
    end 

Quelques lignes de mon routes.rb

map.resources :users                                              
    map.resources :user_sessions 
    map.login '/login', :controller => 'user_sessions', :action => 'new' 
    map.logout '/logout', :controller => 'user_sessions', :action => 'destroy' 

les liens que je suis à la recherche

<ul class="navigation round"> 
    <li><%= link_to("Log In", login_path) unless current_user %></li> 
    <li><%= link_to("Log Out", logout_path) if current_user %></li> 
    </ul> 

de user_sessions_controller

def destroy 
    current_user_session.destroy 
    flash[:notice] = "Logout successful!" 
    redirect_to root_url 
    end 

de application_controller

def current_user_session 
    return @current_user_session if defined?(@current_user_session) 
    @current_user_session = UserSession.find 
end 

def current_user 
    return @current_user if defined?(@current_user) 
    @current_user = current_user_session && current_user_session.record 
end 

versions de pierres précieuses pertinentes

authlogic (2.1.6) 
rails (2.3.8) 
rake (0.8.7) 
rspec (1.3.0) 
rspec-core (2.0.1) 
rspec-expectations (2.0.1) 
rspec-mocks (2.0.1) 
rspec-rails (1.3.2) 
webrat (0.7.2) 

Donc, en conclusion, lorsque je me connecte à la main, je vais à la page d'accueil, et je le journal en lien disponible pour moi sans lien de déconnexion. Quand je passe par webrat dans le test ci-dessus, je me retrouve avec aucun lien de connexion, et le lien de déconnexion est toujours là - indiquant que je suis toujours connecté.

+0

Je pense que le bug est dans la ligne 'click_link/log out/i'. Peut-être devriez-vous utiliser 'click_link" Log Out "' à la place? – tjeden

+0

J'ai essayé ça. Même comportement que décrit. –

Répondre

1

Ceci se produira si vous utilisez le cookie session store, plutôt que le magasin de session de base de données. Voir config/initializers/session_store.rb.

Hier, j'ai commencé à porter un projet en cours de développement de 2.3.5 à 2.3.8. Sous 2.3.5, toutes les spécifications et fonctionnalités étaient vertes. Après avoir modifié la version de Rails en 2.3.8, plusieurs étapes de concombre ont commencé à échouer. Les étapes étaient liées à l'impossibilité de se déconnecter (exactement ce que vous décrivez ici) et au flash [: avis] étant perdu. Ce projet a été créé en copiant des fichiers d'un autre projet dans un projet Rails propre-ardoise. Dans le processus, les migrations de session ont été copiées, mais session_store.rb n'a pas été mis à jour pour utiliser réellement la base de données.

Une fois que j'ai décommenté "ActionController :: Base.session_store =: active_record_store" dans session_store.rb, les étapes du concombre ont commencé à passer.

+0

Je reçois la même erreur - il serait bon de continuer à utiliser les magasins de session d'enregistrement actifs et toujours avoir du concombre avec des sessions. –