3

ユーザーが送信したリンクを保存できるサイトがあります。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
4

1 に答える 1

1

私は2つのことが間違っていました。まず、gemCapybara.current_driver = :mechanizeを介してmy を設定する必要がありました。capybara-mechanize第 2 に、(describe ではなく) it ブロック内に VCR ブロックを含める必要がありました。したがって、以下のコードは機能します。

require 'spec_helper'

describe 'Link' do
  subject { page }
  it "should be created with valid form" do
    VCR.use_cassette "link/create" do
      Capybara.current_driver = :mechanize
      visit root_path  
      click_link "create link"
      fill_in "enter url", with: "http://espn.go.com/golf/masters13/story/_/id/9171606"
      click_button "submit"
      page.should have_selector('h2', text:'Adam Scott 1st Aussie to win Masters')        
    end
  end
end
于 2013-05-11T14:38:32.793 に答える