Как указать параметры POST в тесте Rails? - PullRequest
22 голосов
/ 09 февраля 2009

Работа с Test :: Unit и musta. Пытаюсь проверить 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 ]

44 голосов
/ 09 февраля 2009
post :create, :user => { :email => 'foo@bar.com' }

Общая форма для всех методов тестирования get, post, put, delete выглядит следующим образом:

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

И в тестах хэш params напрямую отправляется в params вашего действия контроллера без какого-либо перевода. Даже выполняя интеграционное тестирование, вам действительно не нужно проверять перевод строки в params, поскольку он очень хорошо описан в тестах rails framework. Кроме того, все методы тестирования, для которых требуются параметры, принимают хеш-код таким образом, чтобы вам было проще.

8 голосов
/ 25 апреля 2009
post :create, {:post => {}, :user => {:email => 'abc@abcd'} }

В этом случае params [: post] равен {}, params [: user] is {: email => 'abc @ abcd'}, params [: user] [: email] равно'abc@abcd'.

post :create, {:post => {:user => {:email => 'abc@abcd'} } }

В этом случае params [: post] [: user] [: email] равен 'abc @ abcd'

...