录像机不使用法拉第记录录像带

时间:2014-06-18 17:04:58

标签: ruby-on-rails ruby-on-rails-4 rspec faraday vcr

我已经在互联网上搜索了这个问题的答案,其中包括其他大多数"建议"关于SO的问题。

我已经在rspec中配置了VCR,但是在运行测试时,VCR从不记录磁带(磁带目录保持为空)并且每次都运行HTTP请求。

我的VCR配置如下所示:

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 gem(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)

1 个答案:

答案 0 :(得分:3)

您已将VCR配置为忽略使用此行向'api.linkedin.com'发出的请求:

c.ignore_hosts 'api.linkedin.com'

...阻止它记录这些请求。