【问题标题】:Using positional arguments in integration tests has been deprecated在集成测试中使用位置参数已被弃用
【发布时间】:2017-05-16 04:24:56
【问题描述】:

我尝试遵循这个答案:https://stackoverflow.com/a/32168734/148844

  # Logs in a test user.
  def log_in_as(user, options = {})
    password    = options[:password]    || 'password'
    remember_me = options[:remember_me] || '1'
    if integration_test?
      post user_session_path, session: { email: user.email,
                                  password:    password,
                                  remember_me: remember_me }

但是我收到了这个警告:

DEPRECATION WARNING: Using positional arguments in integration tests has been deprecated,
in favor of keyword arguments, and will be removed in Rails 5.1.

Deprecated style:
get "/profile", { id: 1 }, { "X-Extra-Header" => "123" }

New keyword style:
get "/profile", params: { id: 1 }, headers: { "X-Extra-Header" => "123" }
 (called from log_in_as at C:/Users/Chloe/workspace/fortuneempire/test/test_helper.rb:16)

所以我尝试了

  post action: user_session_path, session: { email: user.email,
                              password:    password,
                              remember_me: remember_me }

它给了

URI::InvalidURIError: bad URI(is not URI?): http://www.example.com:80{:action=>"/users/sign_in", :session=>{:email=>"MyString@example.com", :password=>"password", :remember_me=>"1"}}
    test/test_helper.rb:16:in `log_in_as'

老实说,我看不出有什么问题。 http://api.rubyonrails.org/classes/ActionController/TestCase/Behavior.html#method-i-get

This 问题的解决方案是标记标头参数,但我没有这样的哈希。

Rails 5.0.2

【问题讨论】:

    标签: ruby-on-rails minitest deprecation-warning


    【解决方案1】:
    post user_session_path, session: { email:       user.email,
                                       password:    password,
                                       remember_me: remember_me }
    

    变成

    post user_session_path, params: { session: { email:       user.email,
                                                 password:    password,
                                                 remember_me: remember_me } }
    

    【讨论】:

    • 你确定吗?文档说session: 是一个单独的键,而不是params: 的成员。
    • 这就是我将其固定在我身边的方式,但经过研究,您的参数被命名为 session 似乎是巧合,因为此消息来自different class,而不是您正在查看的消息。如您所见,people on github usually name it "user" 而不是“会话”,因此会造成混淆
    • 哦,我想我明白了。我使用Devise 进行身份验证,它会创建new_user_session 路径。我以为是在设置用户的 Session/Cookies 实例。
    • 这里的另一个微妙之处是get user_session_path 将触发弃用警告,即使(似乎)根本没有提供旧式位置参数。无论如何添加空参数,例如get user_session_path, params: {}
    猜你喜欢
    • 2022-08-22
    • 1970-01-01
    • 2018-11-07
    • 2018-01-25
    • 2014-02-26
    • 1970-01-01
    • 2021-02-21
    • 2012-11-11
    • 1970-01-01
    相关资源
    最近更新 更多