WebMock имитирует неудачный API (без Интернета, тайм-аут ++)

Я пытаюсь моделировать неожиданное поведение из веб-api, например, не находить сервер и тайм-ауты, используя webmock.

Какой был бы лучший способ сделать это? Все, что я могу придумать, это сделать что-то вроде этого:

stubbed_request = stub_request(:get, "#{host}/api/something.json").
with(:headers => {'Accept'=>'*/*', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby'}).
to_return(:status => [500, "Internal Server Error"])

Это должно работать для таких вещей, как 404 и т.д., но как я могу проверить таймауты, сервер не найден/автономный сервер и отсутствие подключения к Интернету strong >

Ответ 1

После некоторого рытья я нашел некоторые решения для этого.

По-видимому, вы можете изменить to_return(...) на to_timeout, что вызовет ошибку тайм-аута. Вы также можете иметь to_raise(StandardError). Полную ссылку см. В https://github.com/bblimke/webmock#raising-timeout-errors.

Время ожидания или сервер не найден, например:

stubbed_request = stub_request(:get, "#{host}/api/something.json").
with(:headers => {'Accept'=>'*/*', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby'}).
to_timeout

Raise StandardError, или не интернет/другое исключение, например:

stubbed_request = stub_request(:get, "#{host}/api/something.json").
with(:headers => {'Accept'=>'*/*', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby'}).
to_raise(StandardError)

#Error example 2:
stubbed_request = stub_request(:get, "#{host}/api/something.json").
with(:headers => {'Accept'=>'*/*', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby'}).
to_raise("My special error")

Иди сюда, не слишком тяжело.


Я понятия не имею, как я не нашел это в первый раз. В любом случае, надеюсь, что это поможет кому-то в один прекрасный день.