2
我目前正在運行一個循環,其中retry
在我的測試中執行。我如何存根retry
並仍然測試它上面的代碼?RSpec - 處理救援塊內的重試
我有一個片段趕上HostKeyMismatch例外:
rescue Net::SSH::HostKeyMismatch => e
e.remember_host!
retry
end
我的規格:
describe "rescues Net::SSH::HostKeyMismatch" do
it "resyncs the ssh keys" do
Net::SSH::HostKeyMismatch.any_instance.should_receive(:remember_host!).and_return(true)
ssh_class.new.run_ssh_command { raise Net::SSH::HostKeyMismatch }
end
end
錯誤我越來越:
The message 'remember_host!' was received by #<Net::SSH::HostKeyMismatch: Net::SSH::HostKeyMismatch> but has already been received by Net::SSH::HostKeyMismatch
更新:
我能夠通過添加計數器下面的建議答案來解決問題:
describe "rescues Net::SSH::HostKeyMismatch" do
it "resyncs the ssh keys" do
exception = Net::SSH::HostKeyMismatch.new
exception.should_receive(:remember_host!).and_return(true)
count = 0
ssh_class.new.run_ssh_command do
count += 1
raise exception unless count > 1
end
end
end
我想你的答案一字不差,但最後一行似乎在無限循環 –
@MusannifZahir運行:我已經更新我的答案。請嘗試使用 – usha
由於run_ssh_command塊無條件地引發異常,所以出現同樣的問題。我能夠通過添加一個計數器來解決問題 - 問題已經通過最終解決方案進行了更新 –