WebMockでAPIリクエストをstub化する

テスト時に、APIへのリクエストをstub化する用途で使ってみました。
bblimke/webmock


githubのページを見ればわかりますが、
rspec /test unit /minitest/cukeに対応など、とにかく高機能です。
他にも、fakeweb、wwなどがあるようですが、一番更新されてそうだったので
今回はこちらを選択。

使い方

詳細は、githubのページ見てください。
gem入れて、spec_helperでrequireするだけです。

require 'webmock/rspec'


あとは、stub_requestで自由自在。

stub_request(:get, "https://rubygems.org/api/v1/search.json?query=factory_girl").
  to_return(:status => 200, :body => dummy_search_result)

to_returnのところは、ファイルもいけるようです。

他にも

今回は使ってませんが、マッチャも用意されているみたいです。

a_request(:post, "www.example.com").with(:body => "abc", :headers => {'Content-Length' => 3}).should have_been_made.once

a_request(:post, "www.something.com").should have_been_made.times(3)

a_request(:any, "www.example.com").should_not have_been_made

a_request(:post, "www.example.com").with { |req| req.body == "abc" }.should have_been_made

a_request(:get, "www.example.com").with(:query => {"a" => ["b", "c"]}).should have_been_made

a_request(:get, "www.example.com").with(:query => hash_including({"a" => ["b", "c"]})).should have_been_made

a_request(:post, "www.example.com").
  with(:body => {"a" => ["b", "c"]}, :headers => {'Content-Type' => 'application/json'}).should have_been_made