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?
Quelle est l'erreur? –
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"} –
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? –