2013-01-15 67 views
2

我是新來的設計,因爲我採取了現有的應用程序。 它使用設計進行身份驗證(不可確認)。 我想在users_controller中使用update_with_password方法編寫更新方法的測試。如何爲包含Devise update_with_password方法的方法編寫通過測試?

我無法弄清楚我在這裏做錯了什麼。要麼我沒有將正確的參數傳遞給請求(雖然我在之後檢查了開發和模型測試(除了表單的authenticity_token)),或者其他問題出錯了。

我使用測試::單位和夾具:

在users_controller:

def update 
    @user = current_account.users.find(params[:id]) 
    raise @user.valid_password?(params[:user][:current_password]).inspect 
    if @user.update_with_password(params[:user]) 
     sign_in(@user, :bypass => true) 
     flash[:notice] = flash_saved 
     redirect_to edit_user_path(@user) 
    else 
     flash[:alert] = flash_not_saved 
     render 'edit' 
    end 
    end 

在users_controller_test:

test "should update user with password" do 
    @user = users(:participant) 
    sign_in(@user) 
    assert_equal(true, @user.valid_password?('<password>')) 
    put :update, {id: @user.id, method: :put, :user => {email: @user.email, password: nil, password_confirmation: nil, current_password: "<password>", firstname: "louis"}, subaccount: "test"} 
    end 

在夾具:

participant: 
    email: [email protected] 
    id: 3 
    confirmed_at: 2013-01-01 00:10:00 
    account_id: 1 
    firstname: participant 
    last_sign_in_at: <%= Time.now - 30 %> 
    encrypted_password: <encrypted_password> 
    password_salt: <password_salt> 

的一個雖然我在開發中複製了用戶的encrypted_pa​​ssword和password_salt,但是在測試中的ssertion返回false。

在發展中的請求參數:

{"utf8"=>"✓", 
"_method"=>"put", 
"authenticity_token"=>"hy3IJ8C7qQs+iyxZ/VCnrVWEh9vecZCGrAuxwEWxWEE=", 
"user"=>{"email"=>"[email protected]", 
"firstname"=>"", 
"lastname"=>"", 
"gender"=>"", 
"phone1"=>"", 
"current_password"=>"[FILTERED]", 
"password"=>"[FILTERED]", 
"password_confirmation"=>"[FILTERED]"}, 
"commit"=>"Opslaan", 
"subaccount"=>"experience", 
"id"=>"3087"} 

請求paramers測試:

{"subdomain"=>nil, "method"=>"put", "user"=>{"email"=>"[email protected]", "firstname"=>"louis"}, "id"=>"3", "subaccount"=>"test", "controller"=>"users", "action"=>"update"} 

不知怎的,它沒有顯示:current_password,雖然我在請求發送。

我該如何讓這個測試通過?非常感謝您的幫助...

回答

0

第一次通過時除了一行外,看起來沒問題。

raise @user.valid_password?(params[:user][:current_password]).inspect 

嘗試刪除此行,並查看它是否通過。

相關問題