使用Devise和TestCase测试更新用户(Rails 4.1)

时间:2016-06-19 02:30:45

标签: ruby-on-rails ruby devise minitest testcase

我正在尝试测试,更新用户设计强大的参数。

应用程序控制器中设置了强参数:

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"}}

所以测试断言失败了。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

问题是用户没有登录。我正在使用以下方法创建用户: get(:create)在控制器的create动作上创建用户。我改变这是使用用户工厂sign_in create(:user)和所有好的。