2012-05-20 53 views
4

我有一個Rails 3.2.3應用程序,我正在使用MiniTest和Capybara來運行我的集成測試。我推出了自己的身份驗證,並在我的application_controller.rb中創建了一個current_user helper_method。爲什麼在測試過程中我的current_user輔助方法不工作?

我的應用程序佈局文件只顯示某些環節,如註銷等,當用戶登錄。

但CURRENT_USER方法在測試過程中不起作用。它看起來像這樣:

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    private 

    def authenticate 
    if current_user.blank? 
     redirect_to root_url, :alert => "You must first log in." 
    end 
    end 

    def authenticate_admin 
    unless current_user and current_user.admin? 
     redirect_to root_url, :alert => "You must be logged in as an administrator to access  this feature." 
    end 
    end 

    def current_user 
    begin 
     @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    rescue 
     nil 
    end 
    end 

    helper_method :current_user 
end 

所以在我application.html.erb文件有:

<% unless current_user.blank? %> 
<li><%= link_to logout_path %></li> 

所以這個作品時,我通過瀏覽器測試,但不是在我的測試。 「current_user」最終爲零。

我是新來的BDD,但是有什麼可以防止在測試過程中創建會話?我錯過了什麼?

回答

3

注意:不包括控制器中定義的幫助程序方法。

here

解決方案是將它們組織在一個專門的助手類中。

+2

謝謝!我想這同樣適用於MiniTest。但會話散列呢?這是可用的還是我必須在我的登錄助手中創建一個?我會給它一個鏡頭並回報。 – AKWF

相關問題