4

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

型号代码:

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控制台中的值,我看到了

#<Coinbase::UnauthorizedError: Coinbase::UnauthorizedError>

所以消息没有被传递。

在过去的 40 分钟里,我一直在谷歌上搜索这个,我发现的所有内容都只涉及发送错误类,而不是消息。可能存在相同错误类别但消息不同的情况。

任何建议都会很棒。谢谢!

4

2 回答 2

2

我想你想做的是:Coinbase::Error.new("You don't have that many bitcoins in your account to sell.")在加注中。

更新,我认为您也不想e.message == ""因为e == ""您将错误与字符串而不是错误消息进行比较。

于 2014-11-11T06:07:52.387 回答
0

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

通常,传递给错误的第一个参数是消息,但在不是来自标准库的错误中,情况可能并非如此。

Ferrum gem可以做到这一点。例如,当它引发 Ferrum::BrowserError 时,第一个参数是一个自定义响应哈希,其中包含一个“消息”参数,因此存根类似于:

allow(ferrum_node).to receive(:focus).and_raise(
  Ferrum::BrowserError.new({ "message" => "Element is not focusable" })
)
于 2021-06-09T02:54:03.690 回答