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é.
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
J'ai essayé ça. Même comportement que décrit. –