ruby - 第一次间隔后 VCR 自动重新录制不录制

标签 ruby mechanize 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

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

最佳答案

听起来像 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://some-host.com/bar" 的 HTTP 请求。 ,但它会保留任何其他以前记录的 HTTP 交互(例如到 "http://some-host.com/foo" 的那个),因为它不想删除不参与此测试的 HTTP 交互(因此可能被完全不同的测试使用) .

关于ruby - 第一次间隔后 VCR 自动重新录制不录制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17170203/

相关文章:

ruby - 你如何覆盖 ruby​​ 大小写相等运算符? (===)

ruby-on-rails - 在多个页面上使用相同表单的 Rails 最佳实践

ruby-on-rails - 我可以记录未处理的 VCR 请求正文吗?

ruby - 线程安全 : Class Variables in Ruby

ruby - RubyZip解压缩.docx,修改和压缩备份会引发Errno::EACCESS错误

python - 尝试使用 python mechanize 执行 HTTP POST 时出现 400 错误请求错误

c++ - 如何使用C++自动完成php表单?

python - 在 python 中抓取绝对 URL 而不是相对路径

ruby-on-rails - 如何阻止 VCR 覆盖磁带中的 erb

ruby-on-rails - VCR+rspec 元数据 : how to use inferred cassette name like use_vcr_cassette