ste*_*och 8 ruby-on-rails ruby-on-rails-5
根据Rails Edge指南,所有ActionDispatch :: IntegrationTest HTTP请求都带有可选的命名关键字参数:
get post_url, params: { id: 12 }, session: { user_id: 5 }
大.现在,我在控制器测试中得到以下代码:
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
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我的测试失败,我看到以下弃用警告:
ActionDispatch::IntegrationTest HTTP request methods will accept only
the following keyword arguments in future Rails versions:
params, headers, env, xhr
Run Code Online (Sandbox Code Playgroud)
所以显然它的rails不允许我传递一个名为session的关键字参数.
此外,在功能测试中设置会话的两种旧方法都不再有效:
test "some thing" do
session[:user_id] = users(:stephen).id
# etc
end
Run Code Online (Sandbox Code Playgroud)
NoMethodError:nil的未定义方法`session':NilClass
这也失败了:
test "some thing" do
get '/login', nil, nil, { user_id: users(:stephen).id }
# etc
end
Run Code Online (Sandbox Code Playgroud)
只会忽略会话哈希,并且会显示有关仅接受4个不同命名参数的rails的弃用警告.
有没有其他人在使用Rails 5.rc1时遇到这种麻烦?
Rob*_*ers 12
在Rails 5中,不再可能在控制器测试中访问会话:http://blog.napcs.com/2016/07/03/upgrading-rails-5-controller-tests/.建议是访问为您设置适当会话值的控制器方法.此评论显示了您如何解决此限制的示例: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
..
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2961 次 |
| 最近记录: |