在我的应用程序中,我有一个 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
始终为 nilUser.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/