Session 使用会话测试Rails控制器

Session 使用会话测试Rails控制器,session,testing,ruby-on-rails-4,rspec,controller,Session,Testing,Ruby On Rails 4,Rspec,Controller,在我的应用程序中,我有一个会话控制器。现在我想测试用户控制器,它只有在登录时才可访问 我的问题是,我如何才能伪造会话。我已经尝试了很多,希望您现在能帮助我: 应用程序控制器: helper_method :current_user def authenticate_user current_user if @current_user return true else redirect_to(: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
用户控制器具有:

before_filter :authenticate_user
控制器测试:

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
我还尝试了
会话[:user\u id]=user.id
和调试(在get请求之后):

  • 保存和打开页面让我查看登录页面
  • @当前用户
    始终为零
  • User.find(会话[:User\u id])
    返回正确的用户

    • 尝试
      控制器
      而不是
      @请求

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

      您是否在测试中定义了
      @users
      变量?可能应该是
      expect(User.count)。对于等式(1)

      ,这在rails 5中已经不可能了。@RobinClowers那么您对rails 5做了什么?请参见我的答案: