我有一個重試塊RSpec的重試拋出異常,然後返回值
def my_method
app_instances = []
attempts = 0
begin
app_instances = fetch_and_rescan_app_instances(page_n, policy_id, policy_cpath)
rescue Exception
attempts += 1
retry unless attempts > 2
raise Exception
end
page_n += 1
end
其中fetch_and_rescan_app_instances
接入網絡,以便能夠拋出異常。
我想寫一個rspec測試,它第一次拋出一個異常,第二次被調用時不會拋出異常,所以我可以測試第二次拋出異常時my_method是否贏得不會拋出任何豁免。
我知道我可以做stub(:fetch_and_rescan_app_instances).and_return(1,3)
和第一次它返回1和第二次3,但我不知道如何做第一次拋出異常和第二次返回的東西。
在那裏添加了'my_instance',這樣你就可以得到'my_instance.stub(:fetch_and_rescan_app_instances)'等等。調用'stub(:fetch_and_rescan_app_instances)'就像不行。 –
非常感謝! @shioyama,我明白了爲什麼不做救援異常,但如果我不知道它會拋出什麼樣的確切例外呢?我知道這是一個網絡調用,所以它可能有連接問題或其他任何事情,但不知道它會是什麼類型的異常。 – Matilda
@Meena,你可以嘗試一個定期的救援,它只是從StandardError救出。 – Jenn