ユーザーが送信したリンクを保存できるサイトがあります。create アクションは URL を受け取り、html の og:tags からデータを取得します。アプリ自体は正常に動作しますが、VCR を使用して RSpec でテストするのに問題があります。
テストは VCR がなくても問題なくパスしますが、非常に時間がかかります (実際のコードには複数の HTTP 要求があります)。VCR でテストを実行しようとすると、次のエラーが発生します。この問題を解決するにはどうすればよいですか?
Failure/Error: click_button 'submit'
VCR::Error::UnhandledHTTPRequestError:
================================================================================
An HTTP request has been made that VCR does not know how to handle:
GET http://espn.go.com/golf/masters13/story/_/id/9171606
links_controller.rb
def create
@link = Link.new(params[:link])
if @link.save
@link.title_from_url(@link.url)
else
render action: "new"
end
end
リンク.rb
def title_from_url(url)
if !Nokogiri::HTML(open(url)).css("meta[property='og:title']").blank?
self.title = Nokogiri::HTML(open(url)).css("meta[property='og:title']").first.attributes["content"].text
self.save
end
end
link_pages_spec.rb
require 'spec_helper'
describe 'Link' do
subject { page }
before do
visit root_path
click_link "create link"
end
describe "should be created with valid form" do
VCR.use_cassette "link/create" do
before do
fill_in "enter url", with: "http://espn.go.com/golf/masters13/story/_/id/9171606"
click_button "submit"
end
it { should have_selector('h2', text:'Adam Scott 1st Aussie to win Masters')}
end
end
end
仕様/サポート/vcr_setup.rb
VCR.configure do |c|
c.cassette_library_dir = 'spec/vcr_cassettes'
c.hook_into :fakeweb
end