Ruby on rails 断开rspec和_raise并添加消息

Ruby on rails 断开rspec和_raise并添加消息,ruby-on-rails,rspec,coinbase-api,Ruby On Rails,Rspec,Coinbase Api,我正在编写测试,需要测试代码中的救援 型号代码: rescue Coinbase::Error => e #debugger if e == "You don't have that many bitcoins in your account to sell." ... end Rspec代码: allow_any_instance_of(Order).to receive(:sell).and_raise(Coinbase::Error, "You don't have t

我正在编写测试,需要测试代码中的救援

型号代码:

rescue Coinbase::Error => e
  #debugger
  if e == "You don't have that many bitcoins in your account to sell."
  ...
end
Rspec代码:

allow_any_instance_of(Order).to receive(:sell).and_raise(Coinbase::Error, "You don't have that many bitcoins in your account to sell.")
在控制台中添加调试器并查看
e
的值,我明白了

#

所以消息没有被传递进来

在过去的40分钟里,我一直在用谷歌搜索这个问题,我找到的所有东西都只包括发送错误类,而不是消息。可能存在相同错误类但不同消息的情况


任何建议都很好。谢谢

我想您应该这样做:
Coinbase::Error.new(“您的帐户中没有那么多比特币可供出售。”)
在加薪通知中


更新,我认为您还需要
e.message==”
而不是
e==”
,因为您正在将错误与字符串进行比较,而不是将错误消息进行比较。

在拯救自定义错误类的情况下,包可能不符合标准Ruby错误接口

通常,传递给错误的第一个参数是消息,但如果错误不是来自标准库,则可能不是这样

政府经常这样做。例如,当它引发Ferrum::BrowserError时,第一个参数是包含“message”参数的自定义响应哈希,因此存根类似于:

allow(ferrum_node).to receive(:focus).and_raise(
  Ferrum::BrowserError.new({ "message" => "Element is not focusable" })
)

打开控制台,尝试运行Coinbase::Error.new(“您的帐户中没有那么多比特币可供出售”),会发生什么情况?这很好
允许(订单)的任何实例接收(:出售)和筹集(Coinbase::Error.new(“您的帐户中没有那么多比特币可以出售”)
并不是出于某种奇怪的原因。当我把调试器放在上面的位置时,我无法得到
e
来显示消息,我得到了我在尝试我添加的更新之前提到的错误,执行这两个更改并查看它们是否正常工作
e.message
在测试中给了我
“Coinbase::UnauthorizedError”
,完整打印出的
e
#
,所以在控制台中尝试执行
e=Coinbase::Error.new(“您的帐户中没有那么多比特币可供出售。”
然后
e.message
您应该会得到您要查找的消息。还有,刚才做的
e
打印什么?