2016-06-19 4 views
0

강력한 매개 변수가있는 사용자를 테스트하고 업데이트하려고합니다.Devise 및 TestCase (Rails 4.1)를 사용하여 업데이트 사용자 테스트

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 

강한 PARAMS는 응용 프로그램 컨트롤러에서 설정 문제는 Devise :: ParameterSanitizer 객체입니다. @params는 u가 아닌 @user 속성을 반영합니다. pdate_attributes :

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

따라서 테스트 어설 션이 실패합니다.

내가 뭘 잘못하고 있니?

+0

무엇이 오류입니까? –

+0

시험은 통과되지 않습니다 assert_equal '[email protected]', 양수인 (: 사용자) Minitest :: 어설 .email을 : 예상 : "[email protected]" 실제 "[email protected] " {"email "=>"[email protected] ","time_zone "=>"Sydney "} –

+0

이 줄을 변경하면 어떨까요 :"@ user.update user_update_params) "를"@ user.update! (user_update_params) "로 변경하십시오. 예외가 발생합니까? –

답변

1

문제는 사용자가 로그인하지 않았기 때문입니다. 나는 컨트롤러를 만들 때 사용자를 만들려면 get (: create)을 사용하여 사용자를 생성하고있었습니다. 나는 이것을 sign_in create (: user)로 바꾸었다. 사용자 팩토리를 사용하면 좋다.