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做了什么?请参见我的答案: