0

我在录像机中自动重新录制磁带时遇到问题

这是我的配置:

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

对于第一个请求,磁带被正确记录,但在第一次间隔时间过去后它不会重新录制磁带,它只是将新的请求数据附加到文件中,完全忽略间隔。

4

1 回答 1

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 交互(例如 to "http://some-host.com/foo"),因为它不想删除此测试中未涉及的 HTTP 交互(因此可能会被完全不同的测试使用)。

于 2013-06-21T06:14:44.027 回答