ウェブサービスを作っています。

RSpec + VCR で HTTP テストデータを簡単に作成する

HTTP リクエストをスタブ化する WebMock というライブラリがあります。

これは便利なのですが、リクエストの数が増えてくると、テストデータの管理が大変な場合があります。

VCR を使うと、自動でテストデータを作成してくれて便利です。

参考: VCRを使うとRSpecのwebmockの作成が超絶楽になった! - 酒と泪とRubyとRailsと

ここでは、参考記事に載っていない、RSpecメタデータで記述する方法を紹介します。

Gemfile

group :test do
  gem 'webmock'
  gem 'vcr'
end

spec/spec_helper.rb

RSpec.configure do |config|
  ...
end

VCR.configure do |c|
  c.cassette_library_dir = 'spec/cassettes'
  c.hook_into :webmock
  c.configure_rspec_metadata!
end

spec/foo_api_spec.rb

describe 'foo api', vcr: { cassette_name: 'foo_api' } do
  it 'gets a respose from foo api' do
    response = call_foo_api(foo_api_url)
    expect(response.first).to eq 'hello world'
  end
end

これで、1 回目のみ実際のアクセスが行われ、spec/cassettes/foo_api.yml にレスポンスが保存されます。

2 回目からは spec/cassettes/foo_api.yml のデータが使用され、実際のアクセスは行われません。

参考: Usage with RSpec metadata - Test frameworks - Vcr - VCR - Relish