gpt4 book ai didi

ruby-on-rails - 无法在Rails 5 Controller 测试中设置 session 哈希

转载 作者:行者123 更新时间:2023-12-03 16:20:22 31 4
gpt4 key购买 nike

根据Rails Edge Guide,所有ActionDispatch::IntegrationTest HTTP请求都使用可选的命名关键字参数:
get post_url, params: { id: 12 }, session: { user_id: 5 }
伟大的。现在,我在 Controller 测试中获得了以下代码:

test 'should redirect from login page if user is logged in' do
get '/login', session: { user_id: users(:stephen).id }
assert_redirected_to root_url, 'Expected redirect to root'
end

当我运行它时,我的测试 失败,并且看到以下弃用警告:
ActionDispatch::IntegrationTest HTTP request methods will accept only
the following keyword arguments in future Rails versions:
params, headers, env, xhr

因此很明显,它不允许我传递名为 session 的关键字参数。

此外,在功能测试中设置 session 的两种旧方法也不再起作用:
test "some thing" do
session[:user_id] = users(:stephen).id
# etc
end

NoMethodError: undefined method `session' for nil:NilClass



而且这也失败了:
test "some thing" do
get '/login', nil, nil, { user_id: users(:stephen).id }
# etc
end

session 哈希只会被忽略,并且会出现有关仅接受4个不同命名参数的rails的弃用警告。

是否有人在Rails 5.rc1中遇到这种麻烦?

最佳答案

在Rails 5中,不再可以在 Controller 测试中访问 session :http://blog.napcs.com/2016/07/03/upgrading-rails-5-controller-tests/。建议访问将为您设置适当 session 值的 Controller 方法。此注释显示了如何解决此限制的示例,并提供了示例:https://github.com/rails/rails/issues/23386#issuecomment-192954569

  # helper method
def sign_in_as(name)
post login_url, params: { sig: users(name).perishable_signature )
end

class SomeControllerTest
setup { sign_in_as 'david' }

test 'the truth' do
..

关于ruby-on-rails - 无法在Rails 5 Controller 测试中设置 session 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37796129/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com