私のレールアプリはいくつかの異なるAPIに話しています。要求に問題がある場合にエラーが適切に処理されるようにテストを書きたいと思います。たとえば、サービスが停止していて、到達可能でない場合。APIエラーをテストするにはどうすればよいですか?
テスト中に問題が発生しても、サービスから戻ってくるエラーをシミュレートする方法はありますか?
私のレールアプリはいくつかの異なるAPIに話しています。要求に問題がある場合にエラーが適切に処理されるようにテストを書きたいと思います。たとえば、サービスが停止していて、到達可能でない場合。APIエラーをテストするにはどうすればよいですか?
テスト中に問題が発生しても、サービスから戻ってくるエラーをシミュレートする方法はありますか?
webmock gemがこれに役立ちます。具体的な質問については、「カスタムステータスメッセージで応答する」までスクロールしてください。
stub_request(:any, "www.example.com").to_return(:status => [500, "Internal Server Error"])
req = Net::HTTP::Get.new("/")
Net::HTTP.start("www.example.com") { |http| http.request(req) }.message # ===> "Internal Server Error"
私はこの宝石をRspecとTest :: Unitで使用しました。最大の欠点は、特定のモックにどのような要求が当てはまるかを決めるマッチングロジックが、期待通りに機能しないことです。しかし、それはマイナーな悩みです。この宝石はネットに肯定的であり、テストケースからライブサービスに挑戦しようとするよりはるかに優れています。
実際のサービスの代わりにモックを使用して、エラーを返すことができます。