[英]How to test a simple rescue block in ruby
我在 ruby 中有一個自定義事實,如下所示:
Facter.add(:some_random_fact) do
setcode do
output = execute_some_method
if !output.nil? then
begin
pruned_output = output.split("\n")
result = true
rescue
result = false
end
else
result = false
end
end
end
如何使用 rspec 為救援塊編寫單元測試以引發異常?
編輯:如果以下測試是正確的測試方法,請告訴我
it "return fact as false when begin block raises exception" do
output = double(:output)
allow(output).to receive(:split).with(true).and_raise(RuntimeError.new("error occured"))
expect(Facter.fact(:some_random_fact).vallue).to eq(false)
end
您在此處顯示的代碼很奇怪,我覺得我們缺少上下文,但通常您可以刪除一個引發錯誤的方法,如下所示:
expect(output).to receive(:split).with("\n").and_raise(RuntimeError.new("some error"))
但這是 go 關於事物的一種丑陋方式。 如果根據output
的類型有條件地引發錯誤,那么最好找到一種方法將該變量設置為產生錯誤的值。 如何做到這一點,我不能在沒有看到你的代碼測試的情況下告訴你。
例如,假設您將所有這些代碼包裝在def add_fact(output)
中 - 然后從您的測試中,您可以故意為output
傳遞一個導致錯誤的值,並且您不再需要存根拆分(這是一件奇怪的事情)。 這種模式被稱為“依賴注入”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.