我在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
第一次请求录像带被正确记录但是在第一次间隔时间过后它没有重新录制录像带,它只是将新的请求数据附加到文件中,完全忽略了间隔。
答案 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交互(因此可能是用于完全不同的测试)。