2016-06-19 9 views
0

Я пытаюсь протестировать, обновить пользователя с помощью сильных параметров.Проверка пользователей обновлений с помощью 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"}} 

Таким образом, утверждения теста терпят неудачу.

Что я делаю неправильно?

+0

Какая ошибка? –

+0

тест не проходит: assert_equal '[email protected]', правопреемников (: Пользователь) .EMAIL MiniTest :: Утверждение: Ожидаемая: "[email protected]" Actual: «[email protected] " Проблемы в том, что user_update_params: {" email "=>" [email protected] "," time_zone "=>" Sydney "} –

+0

Как насчет того, когда вы меняете эту строку:« @ user.update (user_update_params) "на" @ user.update! (user_update_params) ". Вызывает ли это исключение? –

ответ

1

Проблема была в том, что пользователь не выполнил вход. Я создавал пользователя, используя: get (: create), чтобы создать пользователя для создания действия контроллера. Я изменил это на sign_in create (: user), используя пользовательскую фабрику и все хорошо.