gpt4 book ai didi

ruby-on-rails - RSpec - 处理救援 block 内的重试

转载 作者:数据小太阳 更新时间:2023-10-29 07:56:17 24 4
gpt4 key购买 nike

我目前遇到了一个循环,其中 retry 在我的测试中被执行。我怎样才能 stub 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 的对象上调用 Retry。

所以

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

关于ruby-on-rails - RSpec - 处理救援 block 内的重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19362968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com