session - 使用 session 测试 Rails Controller

标签 session testing ruby-on-rails-4 rspec controller

在我的应用程序中,我有一个 session Controller 。现在我想测试只有登录后才能访问的用户 Controller 。

我的问题是如何伪造 session 。我已经尝试了很多,所以我希望你现在能帮助我:

应用 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

用户 Controller 有:

before_filter :authenticate_user

Controller 测试:

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 请求之后):

  • save_and_open_page 让我看到登录页面。
  • @current_user 始终为 nil
  • User.find(session[:user_id]) 返回正确的用户

最佳答案

尝试使用 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)

关于session - 使用 session 测试 Rails Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24365505/

相关文章:

java - Arquillian JAVA EE 5 和 JBoss 4.2

mysql - 无法找到包 libmysqlclient-dev

php - 如果 session 存储在文件中,为什么仍然使用 cookie 来存储它们?

java - spring boot 用户和 session mongo

multithreading - 如何测试跨线程队列?

java - Jenkins 用引号包裹 java 系统属性

security - HttpSession 安全

session - ColdFusion调用 session 函数

ruby-on-rails - Rails Rspec 套件有故障,但在单独运行时通过

ruby-on-rails - 在 Bootstrap 菜单中设置当前事件选项卡