Видеомагнитофон не записывает кассеты с использованием Фарадея.

Я искал в Интернете ответ на этот вопрос, включая большинство других «предлагаемых» вопросов о SO.

Я настроил VCR в rspec, но при выполнении тестов VCR никогда не записывает ленту (каталог ленты остается пустым) и каждый раз запускает HTTP-запрос.

Конфигурация моего видеомагнитофона выглядит так:

VCR.configure do |c|
  c.cassette_library_dir = Rails.root.join('spec', 'vcr_cassettes')
  c.hook_into :faraday
  c.default_cassette_options = { record: :new_episodes }
  c.configure_rspec_metadata!
  c.allow_http_connections_when_no_cassette = true
  c.ignore_hosts 'api.linkedin.com'
  c.debug_logger = $stderr
end

Я использую faraday, потому что я использую гем LinkedIn (https://github.com/bobbrez/linkedin2 ) уже использует faraday для отправки запросов. Тестовая спецификация, которую я запускаю, выглядит так:

describe API::V1::Connections, type: :request do
  subject { LinkedIn::Client.new scope: %i(r_network) }

  describe 'GET /api/v1/connections/:username', vcr: { cassette_name: 'profile' } do
    it 'fetches the user profile' do
      profile = subject.profile
      expect(profile).not_to be_nil
    end
  end
end

Он проходит каждый раз, но только после того, как каждый раз делает запрос API. Журнал отладки VCR показывает одно и то же при каждом запуске спецификации:

[Cassette: 'profile'] Initialized with options: {:record=>:new_episodes, :match_requests_on=>[:method, :uri, :headers], :allow_unused_http_interactions=>true, :serialize_with=>:yaml, :persist_with=>:file_system}
[faraday] Handling request: [get https://api.linkedin.com/v1/people/~:(connections)?oauth2_access_token=xxxx&format=json {"User-Agent"=>["Faraday v0.9.0"]}] (disabled: false)
[faraday] Identified request type (ignored) for [get https://api.linkedin.com/v1/people/~:(connections)?oauth2_access_token=xxxx&format=json {"User-Agent"=>["Faraday v0.9.0"]}]

Кажется, он должен записать кассету, но файлы .yml никогда не появляются в каталоге spec/vcr_cassettes.

(Используя Rails 4, rspec 3, vcr 2.9)


person camdub    schedule 18.06.2014    source источник


Ответы (1)


Вы настроили видеомагнитофон так, чтобы он игнорировал запросы к 'api.linkedin.com' с помощью этой строки:

c.ignore_hosts 'api.linkedin.com'

... что не позволяет ему записывать эти запросы.

person Myron Marston    schedule 20.06.2014
comment
Да, по какой-то причине у меня сложилось впечатление, что опции ignore_hosts разрешают запросы только на этот URL. Явно невнимательно читал. Спасибо за указание на это. - person camdub; 23.06.2014