23

Webmock を使用して、サーバーやタイムアウトが見つからないなど、Web API からの予期しない動作をシミュレートしようとしています。

これを行う最良の方法は何ですか?私が考えることができるのは、次のようなことをすることだけです:

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 などの場合に機能するはずですが、タイムアウトサーバーが見つからない/オフライン サーバー、およびインターネット接続がないことをテストするにはどうすればよいですか?

4

2 に答える 2

34

掘り下げた後、これに対するいくつかの解決策を見つけました。

どうやら を に変更する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

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")

それほど難しいことではありません。


初めてこれを見つけられなかった理由がわかりません。とにかく、これがいつか誰かを助けることを願っています。

于 2014-08-28T22:58:46.960 に答える