Rspec 3.6,Rails 5错误:`post`请求的参数数量错误(给定2,预期为1)

Nic*_*ick 14 rspec ruby-on-rails rspec-rails ruby-on-rails-5

我刚刚在Rails 5中开始了一个新项目(我的第一个,虽然我在Rails 4.x中有几个项目)并且我在控制器规格方面遇到了麻烦.

describe RequestsController, :type => :controller do

  it "receives new request" do
    post :accept_request, my_params
  end

end
Run Code Online (Sandbox Code Playgroud)

返回错误:

 Failure/Error: post :accept_request, my_params

 ArgumentError:
   wrong number of arguments (given 2, expected 1)
Run Code Online (Sandbox Code Playgroud)

据我所知,日常Rails中记录的Rails 5控制器的首选测试策略发生了转变,特别是将控制器测试转换为请求规范,但没有说明这种控制器测试基本方法的变化.

zet*_*tic 26

似乎Rails 5需要关键字参数而不是哈希参数,这是对以前版本的改变.此外,第一个参数是URL而不是操作.尝试

post some_url, params: some_hash
Run Code Online (Sandbox Code Playgroud)

  • 至于我是如何发现这一点的,我几年来一直在回答关于控制器测试的问题,所以我立刻就知道这个陈述在以前的版本中有效.这缩小到了Rails 5的变化.快速搜索引发了这篇博文:http://blog.bigbinary.com/2016/04/19/changes-to-test-controllers-in-rails-5.提到切换到关键字参数的html. (4认同)
  • 真棒!你能告诉我你是怎么发现的吗?或者关于"关键字参数"的进一步文档?我已经做了相当多的搜索,包括Rails的升级笔记和RSpec的GitHub升级部分,这仍然让我望而却步.只是一些帮助,如何更好地了解像这样或其他微妙的Rails 5更新的事情. (3认同)