我正在编写一个简单的测试来检查我的控制器是否工作,但是我的测试不断返回
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
我的代码有什么问题,我该如何解决?