RSpecでWebアクセスをするクラスをテストする際にモックの機能を提供してくれるので有名なのが『webmock 』です。ただアクセスするWebサイトの数が増えると、Webmock用のデータ作成や管理が面倒になってしまいがちです。そんな時に助けてくれるのが、『VCR 』です。
🏈 VCRとは? VCRとはテストで使う『HTTP通信』を1回目に記録しておいて、2回目以降のテストでの実行時間を短縮し、効率的なテストを支援してくれるGemです。Webmockと組み合わせて使うことができます。
🐡 Gemのインストール Gemfileに以下を追加して、コンソールでbundleを実行してください。
group :test do # HTTP requests用のモックアップを作ってくれる gem 'webmock' gem 'vcr' end
🍣 設定 spec/spec_helper.rb内に次の設定を追加。
VCR.configure do |c| c.cassette_library_dir = 'spec/vcr' c.hook_into :webmock c.allow_http_connections_when_no_cassette = false end
😀 使い方 specファイル内のhttpで通信をしている部分で以下のようにして使います。 ここではサンプルとして、spec/model/your_model_spec.rbでの設定を表示します。
describe YourModel do describe "#call_api" do it "gets a response from an api" do VCR.use_cassette 'model/api_response' do response = call_api(api_url) response.first.should == "hello world" end end end end
これを実行すると、spec/vcr/model/api_response.ymlが作成されます。
--- http_interactions: - request: method: get uri: http://www.example.com/ body: encoding: US-ASCII string: '' headers: Accept: - ! '*/*' User-Agent: - Ruby response: status: code: 200 message: !binary |- T0s= headers: !binary "RGF0ZQ==":
これで2回目以降のアクセスではWebアクセスする代わりに、spec/vcr/model/api_response.ymlを使ってテストしてくれます。
🐰 公式サイト 最後に公式のGitHubの紹介です。
vcr/vcr · GitHub
🐝 参考リンク webmockとvcrを利用してHTTPのmockを作成する | Act as Professional - hiroki.jp
How To Use The VCR Gem With Rails And Rspec
🖥 VULTRおすすめ
「VULTR 」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。
最近はVULTR のヘビーユーザーになので、「ここ 」から会員登録してもらえるとサービス開発が捗ります!