Facebook graph api 录像机不记录成功请求的磁带,只记录失败请求的磁带

Facebook graph api 录像机不记录成功请求的磁带,只记录失败请求的磁带,facebook-graph-api,rspec,vcr,Facebook Graph Api,Rspec,Vcr,我有一个简单的测试来获取一个Facebook对象。我正在使用Curl进行请求 it "gets an object from Facebook" do VCR.use_cassette('facebook') do url = "https://graph.facebook.com/<ID>?access_token=#{@access_token}&#{query_string}" curl = Curl::Easy.perform(url) e

我有一个简单的测试来获取一个Facebook对象。我正在使用Curl进行请求

it "gets an object from Facebook" do
  VCR.use_cassette('facebook') do
    url = "https://graph.facebook.com/<ID>?access_token=#{@access_token}&#{query_string}"
    curl = Curl::Easy.perform(url)
    expect(curl.body_str).to eql('<my object>')
  end
end
当我运行测试时,它通过,并记录以下内容:

[Cassette: 'facebook'] Initialized with options: {:record=>:once, :match_requests_on=>[:method, :uri], :allow_unused_http_interactions=>true, :serialize_with=>:yaml, :persist_with=>:file_system}
[webmock] Handling request: [get https://graph.facebook.com/<ID>?access_token=<TOKEN>&fields=%5B%22id%22,%22account_id%22,%22name%22,%22campaign_group_status%22,%22objective%22%5D] (disabled: false)
[Cassette: 'facebook'] Initialized HTTPInteractionList with request matchers [:method, :uri] and 0 interaction(s): {  }
[webmock] Identified request type (recordable) for [get https://graph.facebook.com/<ID>?access_token=<TOKEN>&fields=%5B%22id%22,%22account_id%22,%22name%22,%22campaign_group_status%22,%22objective%22%5D]
[caste:'facebook']使用以下选项初始化:{:record=>:one,:match_requests_on=>[:method,:uri],:allow_unused_http_interactions=>true,:serialize_with=>:yaml,:persist_with=>:file_system}
[webmock]处理请求:[获取https://graph.facebook.com/?access_token=&fields=%5B%22id%22,%22帐户id%22,%22名称%22,%22活动组状态%22,%22目标%22%5D](已禁用:false)
[CASE:'facebook']使用请求匹配器[:方法,:uri]和0交互初始化了HTTPInteractionList:{}
[webmock]已识别[get]的请求类型(可记录)https://graph.facebook.com/?access_token=&fields=%5B%22id%22,%22帐户\u id%22,%22名称%22,%22活动\u组\u状态%22,%22目标%22%5D]
但磁带未录制,且dir为空。我尝试了
:record=>:all
以获得相同的结果

通常,人们在为正在使用的库使用不兼容的钩子时会遇到此错误,但事实并非如此。我正在使用webmock和路缘

奇怪的是,当请求失败时(例如,令牌过期),磁带会被记录下来。当它被修复后,我删除了这个文件,它就不再被录制了


有人遇到过同样的问题吗?

事实证明,我的代码比上面的要复杂一点,并且在执行请求后正在执行回调。比如:

success_handler = Proc.new { return c.body_str }

curl.on_success do |easy|
  success_handler.call(easy)
end

绕过VCR,文件未写入。重构代码使其不使用回调功能。

这听起来像webmock(VCR用于与路缘接口的库)中的一个bug。当用户使用公共限制API时,它不应该干扰VCR使用WebMock拦截HTTP调用,但似乎这些回调具有这种效果。我鼓励您向github上的WebMock问题追踪器报告这一点。
success_handler = Proc.new { return c.body_str }

curl.on_success do |easy|
  success_handler.call(easy)
end