有没有办法让 VCR 仅在 Rails 应用程序中通过 rspec 调用时才处于活动状态?它对我的测试很有用,但我不希望它在这些测试之外拦截请求。
如果我使用客户端连接到我的应用程序并且应用程序正在调用外部 Web 服务,则会禁用 Real HTTP 连接。
谢谢,马克
有没有办法让 VCR 仅在 Rails 应用程序中通过 rspec 调用时才处于活动状态?它对我的测试很有用,但我不希望它在这些测试之外拦截请求。
如果我使用客户端连接到我的应用程序并且应用程序正在调用外部 Web 服务,则会禁用 Real HTTP 连接。
谢谢,马克
确保您VCR gem
设置在正确的组中
# Gemfile
group :test do
......
gem 'vcr'
end
我终于用 Rails 完成了这项工作。我能够禁用 VCR(实际上是 WebMock,这是我为 VCR 选择的后端),除非我正在运行 rspec。作为背景,我最初在设置 VCR 时按照此处的说明进行操作。
首先,我创建config/initializers/webmock.rb
:
# Disable WebMock globally so it doesn't interfere with calls outside of the specs.
WebMock.disable!
然后我添加了以下内容VCR.use_cassette()
(在我的情况下,这是在spec_helper.rb
:
config.around(:each, :vcr) do |example|
name = example.metadata[:full_description].split(/\s+/, 2).join("/").underscore.gsub(/[^\w\/]+/, "_")
options = example.metadata.slice(:record, :match_requests_on).except(:example_group)
+ # Only enable WebMock for the specs. Don't interfere with calls outside of this.
+ WebMock.enable!
VCR.use_cassette(name, options) { example.call }
+ WebMock.disable!
end
希望对某人有所帮助。