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