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

查看:51
本文介绍了使用会话测试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 并调试(在获取请求之后):

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


  • 保存并打开页面让我看到登录页面。

  • @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

推荐答案

尝试使用控制器而不是 @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)

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

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