【问题标题】:How do you specify POST params in a Rails test?如何在 Rails 测试中指定 POST 参数?
【发布时间】:2009-02-09 19:56:40
【问题描述】:

使用 Test::Unit 和 Shoulda。试图测试Users.create。我的理解是 Rails 表单会为这样的对象发送参数:

user[email]

这在你的行动中变成了哈希,对吧?

params[:user][:email]

好的,所以在我的测试中我已经尝试过......

setup { post :create, :post => { 'user[email]' => 'invalid@abc' } }

setup { post :create, :post => { :user => { :email => 'abc@abcd' } } }

在这两种情况下,在我的操作中,params[:user] 为零。

【问题讨论】:

    标签: ruby-on-rails ruby testing shoulda


    【解决方案1】:
    post :create, :user => { :email => 'foo@bar.com' }
    

    get、post、put、delete所有测试方法的通用形式如下:

    def post(action_name, params_hash = {}, session_hash = {})
    

    在测试中,params 哈希直接发送到控制器操作的params 中,没有任何类型的转换。即使进行集成测试,您也确实不需要测试此字符串以进行参数转换,因为 rails 框架测试很好地涵盖了它。另外,所有需要参数的测试方法都以这种方式接受哈希,而不会抱怨,这对您来说很容易。

    【讨论】:

    • 这也可以工作:"post :create, { :email => 'foo@bar.com' }" 并且从控制器端你将拥有:params[:email] 给你' foo@bar.com'
    【解决方案2】:
    post :create, {:post => {}, :user => {:email => 'abc@abcd'} }

    在这种情况下 params[:post] 是 {}, params[:user] 是 {:email => 'abc@abcd'}, params[:user][:email] 是 'abc@abcd'。

    post :create, {:post => {:user => {:email => 'abc@abcd'} } }

    在这种情况下 params[:post][:user][:email] 是 'abc@abcd'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-03
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 1970-01-01
      • 2014-08-04
      相关资源
      最近更新 更多