2016-06-19 1 views
0

J'essaie de tester, en mettant à jour un utilisateur avec des paramètres puissants.Tester l'utilisateur de mise à jour à l'aide de Devise et TestCase (Rails 4.1)

params fortes sont définies dans le contrôleur d'application:

devise_parameter_sanitizer.for(:account_update) do |u| 
    u.permit(:email, :password, :password_confirmation, :current_password, 
      :time_zone) 
    end 

L'action de mise à jour du contrôleur Les inscriptions est:

def update 
    user_update_params = devise_parameter_sanitizer.sanitize(:account_update) 
    .... 
    @user = User.find(current_user.id) 
    .... 
    @user.update(user_update_params) 
    ... 
end 

Dans mon test je passe à jour les attributs:

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 

Le problème est l'objet Devise :: ParameterSanitizer @params reflète les attributs @user, pas le u pdate_attributes:

@params= 
    {"user"=> 
    {"email"=>"[email protected]", 
    "time_zone"=>"Sydney"}} 

Les assertions de test échouent donc.

Qu'est-ce que je fais mal?

+0

Quelle est l'erreur? –

+0

Le test ne passe pas: assert_equal '[email protected]', cessionnaires (utilisateur): .email Minitest :: Assertion: attendu: "[email protected]" actuelle: « [email protected] " Les problèmes est que user_update_params sont: {" email "=>" [email protected] " "time_zone"=> "Sydney"} –

+0

Qu'en est-il lorsque vous changez cette ligne:" @ user.update (user_update_params) "à" @ user.update! (user_update_params) ". Est-ce que cela soulève une exception? –

Répondre

1

Le problème était que l'utilisateur n'était pas connecté. Je créais un utilisateur en utilisant: get (: create) pour créer un utilisateur sur l'action de création du contrôleur. J'ai changé ceci est à sign_in create (: user) en utilisant une usine d'utilisateur et tout bon.