使用 Session 测试 Rails 控制器 [英] Testing Rails Controller with Session

查看:30
本文介绍了使用 Session 测试 Rails 控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序中,我有一个会话控制器.现在我想测试只有登录后才能访问的用户控制器.

In my app i've got a session controller. Now i want to test the users controller which is only accessible if one is logged in.

我的问题是如何伪造会话.我已经尝试了很多,所以我希望你现在可以帮助我:

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

应用控制器:

   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

我也试过 session[:user_id] = user.id 和调试(在 get 请求之后):

I've also tried session[:user_id] = user.id and debugging (after the get request):

  • save_and_open_page 让我看到登录页面.
  • @current_user 始终为零
  • User.find(session[:user_id]) 返回正确的用户
  • save_and_open_page let me see the login page.
  • @current_user is always nil
  • User.find(session[:user_id]) returns the correct user

推荐答案

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

Also do you have @users variable defined in test? Probably it should be expect(User.count).to eq(1)

这篇关于使用 Session 测试 Rails 控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆