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

时间:2009-02-09 19:56:40

标签: ruby-on-rails ruby testing shoulda

使用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]都是零。

2 个答案:

答案 0 :(得分:44)

post :create, :user => { :email => 'foo@bar.com' }

get,post,put,delete的所有测试方法的一般形式如下:

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

在测试中,params哈希直接发送到你的控制器动作的params,没有任何类型的翻译。即使进行集成测试,你也不需要测试这个字符串来转换params,因为它的rails框架测试非常好。此外,所有需要params的测试方法都会以这种方式接受哈希,而不会让您感到轻松。

答案 1 :(得分:8)

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'