Rails 5 Rspec 设置会话变量

Sha*_*Wan 5 rspec ruby-on-rails ruby-on-rails-5

我有一个测试 POST 请求的请求测试规范。

在我的 PaymentController(处理 POST 请求)中,我有

before_action :require_user, :require_order
Run Code Online (Sandbox Code Playgroud)

它基本上根据会话获取用户和订单。

知道如何在我的请求测试规范中设置会话变量(user_id 和 order_id)吗?

stw*_*ert 1

从 Rails 5.0 开始,最好的方法是在控制器/请求测试中使用关键字参数:

get :index, params: { ... }, session: { user_id: 1, ... }
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 Devise、Clearance 等身份验证库,则有各种帮助程序可以对登录用户进行存根,请参阅此处的Devise文档:

before(:each) do
  # or def setup if using minitest
  @request.env["devise.mapping"] = Devise.mappings[:user]
  sign_in User.create(...)
end
Run Code Online (Sandbox Code Playgroud)