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

Eth*_*han 22 ruby testing ruby-on-rails shoulda

使用Test :: Unit和Shoulda.试着去测试Users.create.我的理解是Rails表单为这样的对象发送params:

user[email]
Run Code Online (Sandbox Code Playgroud)

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

params[:user][:email]
Run Code Online (Sandbox Code Playgroud)

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

setup { post :create, :post => { 'user[email]' => 'invalid@abc' } }
Run Code Online (Sandbox Code Playgroud)

setup { post :create, :post => { :user => { :email => 'abc@abcd' } } }
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,在我的行动中,params[:user]都是零.

Ale*_*yne 44

post :create, :user => { :email => 'foo@bar.com' }
Run Code Online (Sandbox Code Playgroud)

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

def post(action_name, params_hash = {}, session_hash = {})
Run Code Online (Sandbox Code Playgroud)

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


小智 8

post :create, {:post => {}, :user => {:email => 'abc@abcd'} }
Run Code Online (Sandbox Code Playgroud)

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

post :create, {:post => {:user => {:email => 'abc@abcd'} } }
Run Code Online (Sandbox Code Playgroud)

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