[英]RSpec - Dealing with a retry inside a rescue block
我正在進入一個循環,在我的測試中執行retry
試。 我怎樣才能retry
並仍在上面測試代碼呢?
我有一個片段來捕獲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
在調用run_ssh_command的對象上調用重試。
所以
describe "rescues Net::SSH::HostKeyMismatch" do
it "resyncs the ssh keys" do
ssh_instance = ssh_class.new
Net::SSH::HostKeyMismatch.any_instance.should_receive(:remember_host!).and_return(true)
ssh_instance.should_receive(:retry)
ssh_instance.run_ssh_command { raise Net::SSH::HostKeyMismatch}
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.