コントローラーが機能するかどうかを確認する簡単なテストチェックを書いていますが、テストが返され続けます
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
コードの何が問題で、どうすれば修正できますか?