LoginSignup
48
46

More than 5 years have passed since last update.

VCRで外部APIとのやりとりを記録する

Last updated at Posted at 2012-03-05

Railsなどでtestを書く場合、外部APIとのやりとりのあるテストは書きにくい。スピード的にも毎回外部APIにアクセスさせることは避けたい。
VCRを使うとHTTPのリクエストとレスポンスをYAMLファイルに保存してくれ、次回のテスト時にはそのリスクエスト結果が再現される

Gemfile
gem 'vcr'
gem 'webmock'

記録するYAMLが吐かれるディレクトリをtest/vcr_cassettesとすると下記のようにtest_helperで設定する

test/test_helper.rb
VCR.configure do |c|
   c.cassette_library_dir = 'test/vcr_cassettes'
   c.allow_http_connections_when_no_cassette = true  #VCRブロック外のHTTP通信は許可する
   c.hook_into :webmock # or :fakeweb
end

testファイルにて外部アクセスが走る処理のところをVCR.use_cassetteブロックで囲む。
例えば検索APIにアクセスするメソッドがあったとすると下記のようになる

test/unit/search_test.rb
test "search query" do 
  VCR.use_cassette('search_query',:record => :new_episodes) do
    # このブロックで発生するHTTPリスエスト/レスポンスが記録され、次回以降は再生される
    @s = Search.query("foobar")
  end
 assert_equal "foorbar",@s.keyword
end

初回実行時に test/vcr_cassettes/search_query.yml が生成され、次回以降はその内容が再現される。
外部APIの結果をキープしておいて、それをもとにメソッドを追加していくような時に有用である。

48
46
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
46