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