Rails Session Controller

In my application, I have a session controller. Now I want to test a user controller, available only if it is registered.

My problem is how can I fake a session. I've tried a lot already, so I hope you can help me now:

Application controller:

   helper_method :current_user
   def authenticate_user
     current_user
     if @current_user
       return true
     else
       redirect_to(:controller => 'sessions', :action => 'new')
       return false
     end
   end

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

The user controller has:

before_filter :authenticate_user

Controller Test:

describe "GET index" do
  it "assigns all users as @users" do
    user = FactoryGirl.create(:user)
    @request.session[:user_id] = user.id
    get 'users'
    expect(@users.size).to eq(1)
  end
end

I also tried session[:user_id] = user.idand debugged (after request for receipt):

  • save_and_open_page Let me see the login page.
  • @current_user always nil
  • User.find(session[:user_id]) correct user returns
+4
source share
1 answer

controller @request:

user = FactoryGirl.create(:user)
controller.session[:user_id] = user.id
get 'users'
expect(@users.size).to eq(1)

@users, ? , expect(User.count).to eq(1)

+4

Source: https://habr.com/ru/post/1545670/


All Articles