录像机之间的录像机共享请求?

时间:2013-04-23 02:49:47

标签: ruby-on-rails ruby capybara vcr poltergeist

我的录像机配置为:

VCR.configure do |c|
  c.configure_rspec_metadata!
  c.cassette_library_dir = 'spec/cassettes'
  c.hook_into :webmock
  c.ignore_localhost = true
end

测试的例子是:

it "creates a build", :vcr => {:cassette_name => "build/feature/create"} do
  visit new_build_path(build)

  fill_in("build_name", :with => "Test Build")
  click_button("Create Build")

  build = Build.first

  page.should have_content("Build was successfully created.")

  current_path.should == build_path(hub)
end

运行此测试时,会调出几个第三方API,这些请求通过VCR录制。我遇到的问题是,看起来VCR在运行时正在使用来自其他磁带的请求,这导致某些测试的间歇性故障。我已经检查了录像带,有时(根据顺序是如何显示)所有请求都将被录制并完美播放。值得注意的是,这是整个套件运行时,它们总是在自己运行时工作。我没有在失败的规格之间共享磁带,唯一共享的是对API的一些常见请求,我强制命名磁带只是为了确保它使用正确的。我希望这是有道理的......

我的主要问题是可能导致此问题的原因是什么?使用record => :new_episodes时,测试也能正常工作,但在使用record => :once模式时却无法正常工作。考虑到这种情况,这可能没问题但是我想确保我没有创建不必要的请求,并且根据我的理解record => :once应该可以工作,因为应该隔离每个规范的请求。

我知道如果没有更多信息,这可能很难回答,所以请告诉我是否有任何帮助。提前谢谢!

1 个答案:

答案 0 :(得分:0)

正如你所说,从你给出的一点点信息中很难回答。不过,我可以提供一些帮助排除故障的建议。

  • 你提到你正在使用capybara JS驱动程序。 Capybara的JS驱动程序是异步的,这意味着您的应用程序处理特定请求之前可能会继续测试线程 - 因此,如果测试脚本继续并弹出或插入新的VCR磁带,然后您的应用程序发出HTTP请求 - - 它可能导致竞争条件。
  • VCR有一个debug_logger选项,可让您深入了解VCR正在做什么。它可以回答你的问题。
祝你好运!