使用 Session 测试 Rails 控制器 [英] Testing Rails Controller with Session
本文介绍了使用 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 nilUser.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屋!
查看全文