2010-11-25 44 views
0

我正在使用rails with authlogic進行登錄。我正在嘗試使用rspec和webrat進行註銷的集成測試。未能通過webrat測試註銷,Rails with Authlogic

我看到的問題是,webrat似乎得到不同於我點擊時的行爲。所以,當我點擊瀏覽器時,我可以登錄然後註銷,但webrat似乎無法註銷。我診斷這一點是因爲如果您已登錄,我只顯示註銷鏈接,但點擊註銷後它仍然可以通過webrat找到。

這裏是我的測試代碼

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 

從我的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' 

幾行,我從user_sessions_controller尋找

<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> 

鏈接

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

從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 

相關的gem版本

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) 

所以,在最後,當我手動註銷,我去主頁,我提供給我的登錄鏈接沒有註銷鏈接。當我在上面的測試中通過webrat時,我最終沒有登錄鏈接,並且註銷鏈接仍然存在 - 表示我仍然登錄。

+0

我認爲bug是在`click_link /註銷/ i`行。也許你應該使用`click_link'註銷'`而不是? – tjeden 2010-11-25 20:59:45

+0

我試過了。與描述相同的行爲。 – 2010-11-25 21:13:12

回答

1

如果您正在使用cookie會話存儲,而不是數據庫會話存儲。請參閱config/initializers/session_store.rb。

昨天,我開始將一個正在開發的項目從2.3.5移植到2.3.8。在2.3.5之下,所有的規格和特徵都是綠色的。將Rails版本更改爲2.3.8後,幾個Cucumber步驟開始失敗。這些步驟與無法註銷(正如你在這裏描述的)和flash [:notice]丟失有關。這個項目是通過將另一個項目的文件複製到一個乾淨的Rails項目中創建的。在此過程中,會話遷移已複製,但session_store.rb未更新以實際使用數據庫。

一旦我在session_store.rb中取消註釋「ActionController :: Base.session_store =:active_record_store」,Cucumber步驟開始傳遞。