VCR
v-6.0.0
v-6.0.0
  • Introduction
  • Upgrade
  • Changelog
  • About These Examples
  • License
  • Contributing
  • Cassettes
    • Cassette Format
    • Naming
    • Error for HTTP Request Made When No Cassette Is in Use
    • Dynamic ERB Cassettes
    • Automatic Re-Recording
    • Exclusive Cassette
    • Update Content Length Header
    • Decode Compressed Response
    • Allow Unused HTTP Interactions
    • Freezing Time
  • Record modes
    • Once
    • New Episodes
    • None
    • All
    • Record on Error
  • Configuration
    • Cassette Library Dir
    • Hook Into
    • Default Cassette Options
    • Ignore Request
    • Filter Sensitive Data
    • Allow HTTP Connections When No Cassette
    • Debug Logging
    • Preserve Exact Body Bytes
    • URI Parser
    • Query Parser
  • Hooks
    • Before Record Hook
    • Before Playback Hook
    • Before HTTP Request Hook
    • After HTTP Request Hook
    • Around HTTP Request Hook
  • Request matching
    • Introduction
    • Matching on Method
    • Matching on URI
    • Matching on Host
    • Matching on Path
    • Matching on Query String
    • Matching on Body
    • Matching on Headers
    • Identical Requests Are Replayed in Sequence
    • Register and Use a Custom Matcher
    • URI Without Param(s)
    • Playback Repeats
    • Matching on Body as JSON
  • Test frameworks
    • Usage With Test::Unit
    • Usage With RSpec Metadata
    • Usage With Cucumber
  • Middleware
    • Rack
    • Faraday Middleware
  • HTTP Libraries
    • Net::HTTP
    • EM HTTP Request
Powered by GitBook
On this page
  • Background ()
  • ignore requests to a specific port
  • Examples
  • ignored host requests are not recorded and are always allowed
  • Examples
  • unignored host requests are recorded again
  • Examples
  • unignored host requests are not allowed without a cassette
  • Examples
  • localhost requests are not treated differently by default
  • Examples
  • localhost requests are allowed and not recorded when ignore_localhost = true
  • Examples

Was this helpful?

  1. Configuration

Ignore Request

By default, VCR hooks into every request, either allowing it and recording it, or playing back a recorded response, or raising an error to force you to deal with the new request. In some situations, you may prefer to have VCR ignore some requests.

VCR provides 3 configuration options to accomplish this:

  • ignore_request { |req| ... } will ignore any request for which the

    given block returns true.

  • ignore_hosts 'foo.com', 'bar.com' allows you to specify particular

    hosts to ignore.

  • ignore_localhost = true is equivalent to `ignore_hosts 'localhost',

    '127.0.0.1', '0.0.0.0'`. It is particularly useful for when you use

    VCR with a javascript-enabled capybara driver, since capybara boots

    your rack app and makes localhost requests to it to check that it has

    booted.

  • unignore_hosts 'foo.com', 'bar.com' makes VCR stop ignoring particular hosts.

    Ignored requests are not recorded and are always allowed, regardless of the record mode, and even outside of a VCR.use_cassette block.

Background ()

Given a file named "sinatra_app.rb" with:

response_count = 0
$server = start_sinatra_app do
  get('/') { "Port 7777 Response #{response_count += 1}" }
end

ignore requests to a specific port

Given a file named "ignore_request.rb" with:

include_http_adapter_for("<http_lib>")
require 'sinatra_app.rb'

response_count = 0
$server_8888 = start_sinatra_app do
  get('/') { "Port 8888 Response #{response_count += 1}" }
end

require 'vcr'

VCR.configure do |c|
  c.ignore_request do |request|
    URI(request.uri).port == $server.port
  end

  c.default_cassette_options = { :serialize_with => :syck }
  c.cassette_library_dir = 'cassettes'
  <configuration>
end

VCR.use_cassette('example') do
  puts response_body_for(:get, "http://localhost:#{$server_8888.port}/")
end

VCR.use_cassette('example') do
  puts response_body_for(:get, "http://localhost:#{$server.port}/")
end

puts response_body_for(:get, "http://localhost:#{$server.port}/")
puts response_body_for(:get, "http://localhost:#{$server_8888.port}/")

When I run ruby ignore_request.rb

Then it should fail with an error like:

An HTTP request has been made that VCR does not know how to handle:

And the output should contain:

Port 8888 Response 1
Port 7777 Response 1
Port 7777 Response 2

And the file "cassettes/example.yml" should contain "Port 8888"

And the file "cassettes/example.yml" should not contain "Port 7777".

Examples

configuration

http_lib

c.hook_into :webmock

net/http

c.hook_into :typhoeus

typhoeus

c.hook_into :faraday

faraday (w/ net_http)

ignored host requests are not recorded and are always allowed

Given a file named "ignore_hosts.rb" with:

include_http_adapter_for("<http_lib>")
require 'sinatra_app.rb'

require 'vcr'

VCR.configure do |c|
  c.ignore_hosts '127.0.0.1', 'localhost'
  c.cassette_library_dir = 'cassettes'
  <configuration>
end

VCR.use_cassette('example') do
  puts response_body_for(:get, "http://localhost:#{$server.port}/")
end

puts response_body_for(:get, "http://localhost:#{$server.port}/")

When I run ruby ignore_hosts.rb

Then it should pass with:

Port 7777 Response 1
Port 7777 Response 2

And the file "cassettes/example.yml" should not exist.

Examples

configuration

http_lib

c.hook_into :webmock

net/http

c.hook_into :typhoeus

typhoeus

c.hook_into :excon

excon

c.hook_into :faraday

faraday (w/ net_http)

unignored host requests are recorded again

Given a file named "unignore_hosts.rb" with:

include_http_adapter_for("<http_lib>")
require 'sinatra_app.rb'

require 'vcr'

VCR.configure do |c|
  c.ignore_hosts '127.0.0.1', 'localhost'
  c.cassette_library_dir = 'cassettes'
  <configuration>
end

VCR.use_cassette('example') do
  puts response_body_for(:get, "http://localhost:#{$server.port}/")
end

VCR.configure do |c|
  c.unignore_hosts '127.0.0.1', 'localhost'
end

VCR.use_cassette('example') do
  puts response_body_for(:get, "http://localhost:#{$server.port}/")
end

When I run ruby unignore_hosts.rb

Then it should pass with:

Port 7777 Response 1
Port 7777 Response 2

And the file "cassettes/example.yml" should not contain "Response 1"

And the file "cassettes/example.yml" should contain "Response 2".

Examples

configuration

http_lib

c.hook_into :webmock

net/http

c.hook_into :typhoeus

typhoeus

c.hook_into :excon

excon

c.hook_into :faraday

faraday (w/ net_http)

unignored host requests are not allowed without a cassette

Given a file named "unignore_hosts_without_cassette.rb" with:

include_http_adapter_for("<http_lib>")
require 'sinatra_app.rb'

require 'vcr'

VCR.configure do |c|
  c.ignore_hosts '127.0.0.1', 'localhost'
  c.cassette_library_dir = 'cassettes'
  <configuration>
end

puts response_body_for(:get, "http://localhost:#{$server.port}/")

VCR.configure do |c|
  c.unignore_hosts '127.0.0.1', 'localhost'
end

puts response_body_for(:get, "http://localhost:#{$server.port}/")

When I run ruby unignore_hosts_without_cassette.rb

Then it should fail with "An HTTP request has been made that VCR does not know how to handle"

And the output should contain "Response 1"

And the output should not contain "Response 2"

And the file "cassettes/example.yml" should not exist.

Examples

configuration

http_lib

c.hook_into :webmock

net/http

c.hook_into :typhoeus

typhoeus

c.hook_into :excon

excon

c.hook_into :faraday

faraday (w/ net_http)

localhost requests are not treated differently by default

Given a file named "localhost_not_ignored.rb" with:

include_http_adapter_for("<http_lib>")
require 'sinatra_app.rb'

require 'vcr'

VCR.configure do |c|
  c.cassette_library_dir = 'cassettes'
  c.default_cassette_options = { :serialize_with => :syck }
  <configuration>
end

VCR.use_cassette('localhost') do
  response_body_for(:get, "http://localhost:#{$server.port}/")
end

response_body_for(:get, "http://localhost:#{$server.port}/")

When I run ruby localhost_not_ignored.rb

Then it should fail with "An HTTP request has been made that VCR does not know how to handle"

And the file "cassettes/localhost.yml" should contain "Port 7777 Response 1".

Examples

configuration

http_lib

c.hook_into :webmock

net/http

c.hook_into :typhoeus

typhoeus

c.hook_into :excon

excon

c.hook_into :faraday

faraday (w/ net_http)

localhost requests are allowed and not recorded when ignore_localhost = true

Given a file named "ignore_localhost_true.rb" with:

include_http_adapter_for("<http_lib>")
require 'sinatra_app.rb'

require 'vcr'

VCR.configure do |c|
  c.ignore_localhost = true
  c.cassette_library_dir = 'cassettes'
  <configuration>
end

VCR.use_cassette('localhost') do
  puts response_body_for(:get, "http://localhost:#{$server.port}/")
end

puts response_body_for(:get, "http://localhost:#{$server.port}/")

When I run ruby ignore_localhost_true.rb

Then it should pass with:

Port 7777 Response 1
Port 7777 Response 2

And the file "cassettes/localhost.yml" should not exist.

Examples

configuration

http_lib

c.hook_into :webmock

net/http

c.hook_into :typhoeus

typhoeus

c.hook_into :excon

excon

c.hook_into :faraday

faraday (w/ net_http)

PreviousDefault Cassette OptionsNextFilter Sensitive Data

Last updated 4 years ago

Was this helpful?