Tôi có một khối retryRSpec thử lại ném ngoại lệ và sau đó trở về giá trị
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
nơi fetch_and_rescan_app_instances
truy cập mạng như vậy có thể ném một ngoại lệ.
Tôi muốn viết một thử nghiệm rspec nó ném một ngoại lệ lần đầu tiên và không ném một ngoại lệ thứ hai thời gian nó được gọi, vì vậy tôi có thể kiểm tra nếu lần thứ hai nó không ném một ngoại lệ, my_method thắng không ném một ngoại lệ.
Tôi biết tôi có thể làm stub(:fetch_and_rescan_app_instances).and_return(1,3)
và lần đầu tiên nó trả về 1 và lần thứ hai 3, nhưng tôi không biết cách ném một ngoại lệ lần đầu tiên và trả lại thứ gì đó lần thứ hai.
Đã thêm 'my_instance' vào đó để bạn nhận' my_instance.stub (: fetch_and_rescan_app_instances) 'vv. Gọi' stub (: fetch_and_rescan_app_instances) 'giống như vậy sẽ không hoạt động. –
Xin cảm ơn! @shioyama, tôi hiểu tại sao không giải cứu ngoại lệ, nhưng nếu tôi không biết loại ngoại lệ chính xác nào thì nó sẽ ném? Tôi biết đó là một cuộc gọi mạng để nó có thể có vấn đề kết nối hoặc bất cứ điều gì khác, nhưng không chắc chắn loại ngoại lệ nó sẽ được. – Matilda
@Meena, bạn có thể thử giải cứu thường xuyên, chỉ giải cứu được từ StandardError. – Jenn