第一个间隔后,录像机自动重新录制不录制

时间:2013-06-18 13:30:05

标签: ruby mechanize vcr

我在vcr

中自动重新录制磁带时遇到问题

这是我的配置:

VCR.configure do |c|
  c.cassette_library_dir = 'spec/support/vcr_cassettes'
  c.hook_into :fakeweb
end

和电话:

VCR.use_cassette 'my_cassette', :re_record_interval => 60 * 30 do
   agent = Mechanize.new
   start_page = agent.get(START_PAGE)
end

第一次请求录像带被正确记录但是在第一次间隔时间过后它没有重新录制录像带,它只是将新的请求数据附加到文件中,完全忽略了间隔。

1 个答案:

答案 0 :(得分:0)

听起来re_record_interval正在运作,因为它的设计可行,但可能不是您想要的。

当您使用:re_record_interval选项时,如果已经过了足够的时间,VCR会强制:record模式为:all。在此记录模式下,它允许所有HTTP请求都是真实的并记录它们。当它保留记录到磁盘的内容时,它会将新的HTTPInteractions与之前记录的内容合并,删除任何存在匹配的新交互的旧交互(基于您的:match_requests_on选项)。这就是:all的设计工作方式,因为无法保证特定的磁带只能在您的测试套件中使用,因此它可以像这样使用:

it 'makes a request to /foo' do
  VCR.use_cassette("some-host") do
    make_request_to("http://some-host.com/foo")
  end
end

it 'makes a request to /bar' do
  VCR.use_cassette("some-host", :record => :all) do
    make_request_to("http://some-host.com/bar")
  end
end

在这种情况下,当it "makes a request to /bar"测试运行时,它将允许请求真实并记录它,并且当将其持久保存到磁盘时,它将取代之前记录的任何HTTP请求"http://some-host.com/bar",但它会留下任何其他先前记录的HTTP交互(例如"http://some-host.com/foo"之一),因为它不想删除此测试中未涉及的HTTP交互(因此可能是用于完全不同的测试)。