我正在尝试测试,更新用户设计强大的参数。
应用程序控制器中设置了强参数:
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: 'bob@home.com',
time_zone: 'Melbourne'}}
end
test 'Update' do
patch(:update, update_attributes)
assert_equal 'bob@home.com', assigns(:user).email
assert_equal 'false', assigns(:user).use_weighted_rates
end
问题是Devise :: ParameterSanitizer对象@params反映了@user属性,而不是update_attributes:
@params=
{"user"=>
{"email"=>"john@home.com",
"time_zone"=>"Sydney"}}
所以测试断言失败了。
我做错了什么?
答案 0 :(得分:1)
问题是用户没有登录。我正在使用以下方法创建用户: get(:create)在控制器的create动作上创建用户。我改变这是使用用户工厂sign_in create(:user)和所有好的。