Feedjira: Видеомагнитофон не записывает кассеты

У меня есть очень простой контроллер, который берет некоторые данные из rss с помощью Feedjira. Я хочу протестировать этот контроллер, записав ответ RSS. Вот код контроллера:

  def index
    @news = Feedjira::Feed.fetch_and_parse URI.encode("http://news.google.com/news/feeds?q=\"#{query}\"&output=rss")
  end

и мой тест спецификации:

it "should assign news feed", :vcr do
  get :index
  assigns(:news).entries.size.should == 6
  assigns(:news).entries[0].title.should == "First item title"
end

и код для конфигурации vcd:

VCR.configure do |c|
  c.cassette_library_dir = Rails.root.join("spec", "vcr")
  c.hook_into :fakeweb
  c.ignore_localhost = true
end

RSpec.configure do |c|
  c.treat_symbols_as_metadata_keys_with_true_values = true
  c.around(:each, :vcr) do |example|
    name = example.metadata[:full_description].split(/\s+/, 2).join("/").underscore.gsub(/[^\w\/]+/, "_")
    options = example.metadata.slice(:record, :match_requests_on).except(:example_group)
    VCR.use_cassette(name, options) { example.call }
  end
end

По какой-то неизвестной причине кассета видеомагнитофона не записывается в этом конкретном тесте. Все другие тесты, использующие веб-вызовы, работают, но с этим с Feedjira кажется, что vcr не обнаруживает сетевые вызовы. Почему?


person Daniel Cukier    schedule 26.08.2014    source источник
comment
Пожалуйста, добавьте код для вашего блока VCR.configure в spec_helper.rb   -  person infused    schedule 27.08.2014


Ответы (2)


Согласно главной странице Feedjira, для выполнения HTTP-запросов используется curb, а не Net::HTTP:

Важной целью Feedjira является скорость — выборка выполняется быстро благодаря использованию libcurl-multi через драгоценный камень обочины.

VCR может использовать FakeWeb только для подключения к Net::HTTP запросам. Чтобы подключиться к запросам ограничения, вам нужно использовать вместо этого hook_into :webmock.

person Myron Marston    schedule 09.09.2014
comment
Теоретически это должно работать, но теперь с webmock я получаю эту ошибку: Незарегистрированный запрос: POST identity. api.rackspacecloud.com/v2.0/tokens... потому что я использую интеграцию тумана несущей волны в одной из своих моделей... - person Daniel Cukier; 09.09.2014

Начиная с этой фиксации в Feedjira 2.0, Feedjira использует фарадея, что означает, что вы можете следовать руководство по тестированию в ознакомлении с Faraday или воспользуйтесь видеомагнитофоном.

Feedjira теперь также использует видеомагнитофон внутри компании. Пример

Например, вы можете использовать vcr в примере rspec, подобном этому:

it 'fetches and parses the feed' do
  VCR.use_cassette('success') do
    feed = Feedjira::Feed.fetch_and_parse 'http://feedjira.com/blog/feed.xml'
    expect(feed.last_modified).to eq('Fri, 07 Oct 2016 14:37:00 GMT')
  end
end
person HParker    schedule 12.11.2016
comment
Это выиграет от более подробной информации в самом ответе, а не во внешних ссылках. - person GS - Apologise to Monica; 12.11.2016