簡體   English   中英

RSpec - 處理救援區內的重試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM