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
打印什么?