Я пытаюсь протестировать, обновить пользователя с помощью сильных параметров.Проверка пользователей обновлений с помощью Devise и TestCase (Rails 4.1)
Сильные PARAMS установлены в контроллере приложения:
devise_parameter_sanitizer.for(:account_update) do |u|
u.permit(:email, :password, :password_confirmation, :current_password,
:time_zone)
end
Действие обновление зарегистрирования Контроллер является:
def update
user_update_params = devise_parameter_sanitizer.sanitize(:account_update)
....
@user = User.find(current_user.id)
....
@user.update(user_update_params)
...
end
В моем тесте я передаю обновление атрибутов:
def update_attributes
{user: {email: '[email protected]',
time_zone: 'Melbourne'}}
end
test 'Update' do
patch(:update, update_attributes)
assert_equal '[email protected]', assigns(:user).email
assert_equal 'false', assigns(:user).use_weighted_rates
end
Проблема заключается в том, что объект Devise :: ParameterSanitizer @params отражает атрибуты @user, а не u pdate_attributes:
@params=
{"user"=>
{"email"=>"[email protected]",
"time_zone"=>"Sydney"}}
Таким образом, утверждения теста терпят неудачу.
Что я делаю неправильно?
Какая ошибка? –
тест не проходит: assert_equal '[email protected]', правопреемников (: Пользователь) .EMAIL MiniTest :: Утверждение: Ожидаемая: "[email protected]" Actual: «[email protected] " Проблемы в том, что user_update_params: {" email "=>" [email protected] "," time_zone "=>" Sydney "} –
Как насчет того, когда вы меняете эту строку:« @ user.update (user_update_params) "на" @ user.update! (user_update_params) ". Вызывает ли это исключение? –