Добавьте эту функцию к коду
def wait_for
timeout = 3
start = Time.now
x = yield
until x
if Time.now - start > timeout
raise "Wait to long here. Timeout #{timeout} sec"
end
sleep(0.1)
x = yield
end
end
А потом использовать каждый раз, когда нужно что-то ждать асинхронно:
client.check_mail
wait_for do
!client.envelope.nil?
end
expect(client.envelope.message['sender']).to eq 'Subzero'
В примере конверт заполнен данными асинхронным вызовом