关闭特定规格的VCR

Eng*_*_DJ 2 ruby rspec vcr

如何告诉VCR我希望它完全忽略spec文件?

在Google网上论坛发布了一条帖子,建议允许真正的HTTP请求,或明确关闭VCR.

在我看来,除非规范具有:vcr元数据标签,否则VCR不会嗤之以鼻.我不想关闭VCR并重新打开before/ after,因为我不知道它是否已预先打开.我不想在所有规范中允许真正的HTTP请求,只是某些特定的规范.

有没有办法让VCR更具选择性?

Cas*_*son 10

这不是最优雅的解决方案,但您可以使用实例变量将配置返回到其原始设置

describe "A group of specs where you want to allow http requests" do
  before do
    VCR.configure do |c|
      @previous_allow_http_connections = c.allow_http_connections_when_no_cassette?
      c.allow_http_connections_when_no_cassette = true
    end
  end

  after do
    VCR.configure do |c|
      c.allow_http_connections_when_no_cassette = @previous_allow_http_connections
    end
  end

  # Specs in this block will now allow http requests to be made

end
Run Code Online (Sandbox Code Playgroud)

我发现这对我最初启动并运行 API 并希望能够调试我发出的请求很有帮助。一旦我让 API 正常工作,我就可以删除之前和之后的块,并像往常一样使用 VCR。


Ant*_*ony 5

当然,在你的配置块中添加:

VCR.configure do |c|
  c.allow_http_connections_when_no_cassette = true
end
Run Code Online (Sandbox Code Playgroud)

这是AFAIK VCR对您的测试套件的唯一选择.查看文档.

最有可能的是你应该考虑这样的行为记录模式,这样才有可行.


Mag*_*ode 5

就我而言,我不想允许非 VCR 规格的真正 HTTP 连接,我只是希望对这些规格禁用 VCR,以便 Webmock 直接处理它们。这对我有用:

RSpec.configure do |config|
  config.around do |example|
    if example.metadata.key?(:vcr)
      example.run
    else
      VCR.turned_off { example.run }
    end
  end
end
Run Code Online (Sandbox Code Playgroud)