0

Capybara を使用してコントローラーをテストしようとしています。さまざまな方法を試しましたが、何らかの理由で current_user セッションを表示できません。仕様を実行すると、ログインが機能することがわかります。コントローラーのテストの前に、ログインページにもアクセスしています。しかし、 :logged_in 関数がヒットすると、常にリダイレクトされるようです。

何が欠けているのかわからないのですか?

これが私が持っているものです..

セッションコントローラー

    def create
    user = User.find_by_username(params[:username])
    if( user && user.authenticate(params[:password]))
        user.update_attribute(:token, User.token_digest)
        flash[:notice] = "Success"
        session[:user_id] = user.id
        session[:token] = user.token
        redirect_to dashboard_index_path  
    else
        flash[:notice] = "Failed"
        flash.now.alert = "Invalid user name or password"
        render "new"
    end
end

アプリケーションコントローラー

protect_from_forgery
  before_filter :logged_in 
private  

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

      def logged_in
        if !current_user
            redirect_to root_url
          return
        end
        if session[:token] != current_user.token
          redirect_to root_url
        end
      end

products_controller_spec

it 'Should display new product form' do
    user_login
    visit new_product_path
    response.body.should have_content("<h1>Create New Product</h1>")
end

spec_helper.rb

def user_login
  visit root_path #this is new_session
  fill_in "username", :with => "admin"
  fill_in "password", :with => "111111"
  click_button "Login"
end
4

1 に答える 1

2

政治的に正しい方法かどうかはわかりませんが、ページにアクセスする代わりに、セッションを設定するのが難しいだけです。spec_helper.rb で..

def user_login
    user = FactoryGirl.create(:user)
    session[:user_id] = user.id
    session[:token] = User.token_digest
end
于 2012-08-23T00:05:23.140 に答える