Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Can';rspec测试中的符号转换为整数_Ruby On Rails_Ruby On Rails 3_Rspec_Factory Bot - Fatal编程技术网

Ruby on rails Can';rspec测试中的符号转换为整数

Ruby on rails Can';rspec测试中的符号转换为整数,ruby-on-rails,ruby-on-rails-3,rspec,factory-bot,Ruby On Rails,Ruby On Rails 3,Rspec,Factory Bot,我正在编写一个简单的测试来检查我的控制器是否工作,但是我的测试不断返回 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

我正在编写一个简单的测试来检查我的控制器是否工作,但是我的测试不断返回

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)>'
这是我的模型的链接

编辑:问题似乎源于我的控制器。在我的本地服务器上,返回

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

我的代码有什么问题,如何修复?

尝试将id:to:id更改为:

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

您是否确实在使用
描述“测试控制器”
?如果是这样,您可以尝试将其更改为
descripe tests controller
descripe users controller
(以适当的为准),以便RSpec知道正在测试的控制器


否则,您可以发布异常消息的完整回溯吗?

如果更改此行,会发生什么情况:

redirect_to new_password_reset_path, flash[:error] = "Password reset has expired"
致:

?


我的猜测是,您不应该能够在
重定向到
中调用
flash[:error]=
,因为Ruby中的赋值返回被赋值的值
redirect_to
需要散列作为第二个参数,但它被作为字符串调用。

您没有传递:user参数,因此此行可能会给您一个错误:

elsif @user.update_attributes(params[:user])
试着做:

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

将有效的_user_属性设置为所需的更新,例如{'email'=>'new_email@x.x“}

不,我正在使用自己的从头开始的身份验证系统。对于密码重置,我是在Ryan Bates Railscast密码重置后设计的。他和我的代码几乎是一字不差的。你能确保第二个“before”在第一个之后执行吗?在规范中的:update操作之前尝试调试。我甚至尝试将FactoryGirl创建和后续属性添加放在:update操作之前,但仍然一无所获。在此之前,我使用
get:edit,id:@user.password\u reset\u token
编写了一个测试,测试通过了。我使用了适当的descripe MyController语法。我想指出的是,在玩了一段时间之后,我认为这不是rspec的问题。当实际测试我的应用程序时,我的页面上会弹出一个错误。它在PasswordResetController中返回
类型错误#update无法将符号转换为字符串
。我在问题中公布了控制器代码,因为这似乎是问题所在。控制器代码的第19行是哪一行?
elsif @user.update_attributes(params[:user])
before do
  put :update, :id => @user.password_reset_token, :user => valid_user_attributes
end