我有一个请求测试规范,用于测试POST请求。
在我的PaymentController(处理POST请求)中,我有
before_action :require_user, :require_order
基本上根据会话获取用户和订单。
我知道如何在我的请求测试规范中设置会话变量(user_id和order_id)?
答案 0 :(得分:0)
从Rails 5.0开始,最好的方法是在控制器/请求测试中使用关键字参数:
get :index, params: { ... }, session: { user_id: 1, ... }
如果您使用的是诸如Devise,Clearance之类的身份验证库,则可以使用各种助手对已登录的用户进行存根,请参见Devise的文档:
before(:each) do
# or def setup if using minitest
@request.env["devise.mapping"] = Devise.mappings[:user]
sign_in User.create(...)
end
答案 1 :(得分:0)
对于Rails <5,此解决方案有效
def _set_session(key, value)
Warden.on_next_request do |proxy|
proxy.raw_session[key] = value
end
end
_set_session(:access_acount_id, user.id)
def _set_session(key, value)
Warden.on_next_request do |proxy|
proxy.raw_session[key] = value
end
end
context 'When there is something' do
let(:yesterday) { 1.day.ago }
let(:updates_enabled) { true }
before do
_set_session(:access_acount_id, user.id)
login_as(user, scope: :user)
end
it 'does not update records' do
visit dashboard_path
expect(page).to have_css('.popup#my-popup')
end
end