ruby Rails post方法参数错误

gc0ot86w  于 2022-11-04  发布在  Ruby
关注(0)|答案(1)|浏览(140)

下面的代码是集成测试的一部分,它发出一个post请求。

assert_no_difference 'User.count' do
      post users_path, params: { user: {
        name: '',
        email: 'user@invalid',
        password: 'foo',
        password_confirmation: 'bar'
      }} 
    end

但是,在运行测试时,我不断收到错误:

ArgumentError: wrong number of arguments (given 2, expected 1)

在检查堆栈跟踪时,我意识到此错误源于以下integration.rb文件中的以下post方法,该文件位于https://github.com/rails/rails/blob/8015c2c2cf5c8718449677570f372ceb01318a32/actionpack/lib/action_dispatch/testing/integration.rb
该方法定义为:


# Performs a POST request with the given parameters. See ActionDispatch::Integration::Session#process

      # for more details.
      def post(path,**args)
        process(:post, path,**args)
      end

如上所示,integration.rbpost方法期望params参数作为关键字参数,其中doublesplat运算符用于将关键字参数转换为哈希值。

post users_path, params: { user: {
        name: '',
        email: 'user@invalid',
        password: 'foo',
        password_confirmation: 'bar'
      }}

它似乎被隐式地转换为散列,从而导致产生上述错误。
为了确认这一点,我将integration.rbpost方法修改为:


# Performs a POST request with the given parameters. See ActionDispatch::Integration::Session#process

      # for more details.
      def post(path, args)
        process(:post, path,**args)
      end

在进行此更改后,代码将完美运行。
我的问题是我遗漏了什么?Rails是否执行了某种将params关键字参数隐式转换为哈希的操作?
任何帮助都是非常感谢的。

f4t66c6m

f4t66c6m1#

我已经解决了这个问题。
此问题源于未包含最新版本的rails-controller-testing gem。更新gem后,代码正常工作。

相关问题