代码之家  ›  专栏  ›  技术社区  ›  Ethan

如何在Rails测试中指定post参数?

  •  22
  • Ethan  · 技术社区  · 15 年前

    使用测试::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] 是零。

    2 回复  |  直到 15 年前
        1
  •  44
  •   Alex Wayne    15 年前
    post :create, :user => { :email => 'foo@bar.com' }
    

    GET、POST、PUT、DELETE所有测试方法的一般形式如下:

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

    在测试中,参数散列直接发送到 params 你的控制器动作没有任何翻译。即使进行集成测试,您也不需要测试这个字符串到参数的转换,因为Rails框架测试很好地覆盖了它。另外,所有需要参数的测试方法都会以这种方式接受散列值,而不会抱怨这会使您的工作变得容易。

        2
  •  8
  •   qbit    15 年前
    post :create, {:post => {}, :user => {:email => 'abc@abcd'} }

    在这种情况下,参数[:post]为, 参数[:user]是:email=>'abc@abcd', 参数[:user][:email]是'abc@abcd'。

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

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