2009-02-09 45 views
20

使用Test :: Unit和Shoulda。试图测试Users.create。我的理解是,Rails窗体为这样的对象发送参数:如何在Rails测试中指定POST参数?

user[email] 

在你的动作中会变成散列,对吗?

params[:user][:email] 

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

setup { post :create, :post => { 'user[email]' => '[email protected]' } } 

setup { post :create, :post => { :user => { :email => '[email protected]' } } } 

在这两种情况下,比我的行动,params[:user]是零。

回答

43
post :create, :user => { :email => '[email protected]' } 

为GET,POST,放,删除的所有测试方法的一般形式如下:

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

而且在测试中,params哈希表被直接发送到您的控制器操作的params没有任何翻译。即使进行集成测试,你也不需要测试这个字符串,以便通过rails框架测试很好地覆盖翻译。另外,所有需要参数的测试方法都会以这种方式接受散列,而无需投诉使您的工作变得轻松。

+0

这也是要去工作:“后:创建,{:电子邮件=>“富@ bar.com'}“,从控制器端你会得到:params [:email]给你'[email protected]' – nisevi 2015-05-13 05:27:27

6
post :create, {:post => {}, :user => {:email => '[email protected]'} }

在这种情况下PARAMS [:交]是{}, PARAMS [:用户]是{:电子邮件=> 'ABC @ ABCD'}, PARAMS [:用户] [:电子邮件]是“ ABC @ ABCD”。

post :create, {:post => {:user => {:email => '[email protected]'} } }

在这种情况下PARAMS [:交] [:用户] [:电子邮件]名为 'abc @ ABCD'