Ruby on rails 如何在Rails测试中指定POST参数?

Ruby on rails 如何在Rails测试中指定POST参数?,ruby-on-rails,ruby,testing,shoulda,Ruby On Rails,Ruby,Testing,Shoulda,使用Test::Unit和Shoulda。正在尝试测试用户。创建。我的理解是Rails表单为如下对象发送参数: user[email] 在你的行动中会变成散列,对吗 params[:user][:email] 好的,在我的测试中我试过 setup { post :create, :post => { 'user[email]' => 'invalid@abc' } } 及 在这两种情况下,在我的操作中,params[:user]为零 post :create, :user =&

使用Test::Unit和Shoulda。正在尝试测试
用户。创建
。我的理解是Rails表单为如下对象发送参数:

user[email]
在你的行动中会变成散列,对吗

params[:user][:email]
好的,在我的测试中我试过

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

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

post :create, :user => { :email => 'foo@bar.com' }
get、post、put、delete所有测试方法的通用格式如下:

def post(action_name, params_hash = {}, session_hash = {})
在测试中,params散列直接发送到控制器操作的
params
,而不进行任何转换。即使进行集成测试,您也不需要测试这个字符串到参数的转换,因为rails框架测试很好地涵盖了它。另外,所有需要参数的测试方法都以这种方式接受散列,而无需抱怨,从而使您的工作变得简单

post :create, {:post => {}, :user => {:email => 'abc@abcd'} }
在本例中,params[:post]是{}, params[:user]是{:email=>'abc@abcd'}, 参数[:用户][:电子邮件]为'abc@abcd"

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

这也会起作用:“post:create,{:email=>”foo@bar.com“}”并且在控制器端,您将拥有:params[:email]提供给您的foo@bar.com'
post :create, {:post => {:user => {:email => 'abc@abcd'} } }