1

コントローラーが機能するかどうかを確認する簡単なテストチェックを書いていますが、テストが返され続けます

3) PasswordResetsController for checking update succeeds 
 Failure/Error: put :update, id: @user.password_reset_token
 TypeError:
   can't convert Symbol into Integer
 # ./app/controllers/password_resets_controller.rb:23:in `update'
 # ./spec/controllers/password_resets_controller_spec.rb:52:in `block (3 levels) in 
 <top (required)>'

私のテストは次のとおりです...

describe PasswordResetsController do

before do
  @user = FactoryGirl.create( :user )
end

context "for checking update succeeds" do
  before do
    @user.password_reset_token = "gB5KGF-3hC4RNHCK5niz9A"
    @user.password_reset_sent_at = Time.zone.now
    @user.save!(validate: false) 
    put :update, id: @user.password_reset_token
  end


  it { should assign_to(:user) }      
  it { should respond_with(:redirect) }
  it { should redirect_to(signin_path) }
  it { should set_the_flash.to("Password has been reset.")}

end

end

ここに私のモデルへのリンクがあります https://github.com/thejourneydude/template/blob/master/app/models/user.rb

編集:問題はコントローラーに起因しているようです。私のローカルサーバーでは、次のように返されます

TypeError in PasswordResetsController#update

can't convert Symbol into String

Rails.root: /home/jason/ror/template
Application Trace | Framework Trace | Full Trace

app/controllers/password_resets_controller.rb:19:in `update'

私のコントローラーコードでの更新アクションは..

def update
  @user = User.find_by_password_reset_token!(params[:id])
  if @user.password_reset_sent_at && @user.password_reset_sent_at > 2.hours.ago
    redirect_to new_password_reset_path, flash: { error: "Password reset has expired" }
  elsif @user.update_attributes(params[:user])
    redirect_to root_url, flash: { success: "Password has been reset." }
  else 
    render :edit, flash: { error: "Hmm.. something went wrong. Let's try that again." }
  end
end

コードの何が問題で、どうすれば修正できますか?

4

4 に答える 4

1

:user パラメーターを渡していないため、次の行でエラーが発生する可能性があります。

elsif @user.update_attributes(params[:user])

やってみてください:

before do
  put :update, :id => @user.password_reset_token, :user => valid_user_attributes
end

{ 'email' => 'new_email@xx' } のように、valid_user_attributes を必要な更新に設定します。

于 2012-12-07T16:18:57.587 に答える
0

実際に使っていdescribe "tests controller"ますか?その場合、RSpec がテスト対象のコントローラーを認識できるように、describe TestsControllerまたは(どちらか適切な方) に変更してみてください。describe UsersController

それ以外の場合は、例外メッセージから完全なバックトレースを投稿できますか?

于 2012-12-05T04:32:58.597 に答える
0

次のように、id: を :id に変更してみてください。

before do
   put :update, :id => @user.password_reset_token
 end
于 2012-12-04T20:03:59.163 に答える