Minitest IntegrationTest ArgumentError:未知关键字:session

时间:2017-05-31 12:43:36

标签: ruby-on-rails ruby minitest

我使用像这样的minitest实现集成测试

test "should get index" do
  get admin_product_url, params: {}, session: { user_id: @admin_user.id }
  assert_response :success
end

但是我收到此错误消息

ArgumentError: unknown keyword: session

我还能如何设置会话信息?

我正在使用ruby 2.4和rails 5.0.2

3 个答案:

答案 0 :(得分:1)

在Rails 5中,不再可能在控制器测试中访问会话。 Integration tests doesn't allow you to set session.

<子> Ref

答案 1 :(得分:1)

集成测试近似于浏览会话,因此您发出的请求只能使用传递参数,标题等。从这个角度来看,session访问器只有在您创建初始化后才可用请求,你不能传递这样的会话变量哈希。理想情况下,您应该测试更复杂的交互,而不仅仅是单个请求,并且您应该对控制器逻辑设置的会话值进行断言。但你可以像这样构建上面的测试:

test "should get index" do
  get admin_product_url                  # first request initializes session
  session[:user_id] = @admin_user.id     # can now update session state
  get admin_product_url                  # subsequent request
  assert_response :success               # assertions follow
end

答案 2 :(得分:0)

这应该有效:

test "should get index" do
  session[:user_id] = @admin_user.id
  get admin_product_url, params: {}
  assert_response :success
end