To add a collaborator to this project you will need to use the Relish gem to add the collaborator via a terminal command. Soon you'll be able to also add collaborators here!
More about adding a collaboratorUsage with Cucumber
VCR can be used with cucumber in two basic ways:
- Use
VCR.use_cassette
in a step definition. - Use a
VCR.cucumber_tags
block to tell VCR to use a cassette for a tagged scenario.
In a cucumber support file (e.g. features/support/vcr.rb), put code like this:
VCR.cucumber_tags do |t|
t.tag '@tag1'
t.tags '@tag2', '@tag3'
t.tag '@tag3', :cassette => :options
t.tags '@tag4, '@tag5', :cassette => :options
t.tag '@vcr', :use_scenario_name => true
end
VCR will use a cassette named "cucumber_tags/
with each of these tags (Unless the :use_scenario_name option is provided. See below).
The configured default_cassette_options
will be used, or you can override specific
options by passing a hash as the last argument to #tag
or #tags
.
You can also have VCR name your cassettes automatically according to the feature
and scenario name by providing :use_scenario_name => true to '#tag' or '#tags'.
In this case, the cassette will be named "
- Scenarios
-
- Record HTTP interactions in a scenario by tagging it
-
- Given
-
a file named "lib/server.rb" with:
if ENV['WITH_SERVER'] == 'true' start_sinatra_app(:port => 7777) do get('/:path') { "Hello #{params[:path]}" } end end
- Given
-
a file named "features/support/vcr.rb" with:
require "lib/server" require 'vcr' VCR.configure do |c| c.hook_into :fakeweb c.cassette_library_dir = 'features/cassettes' end VCR.cucumber_tags do |t| t.tag '@localhost_request' # uses default record mode since no options are given t.tags '@disallowed_1', '@disallowed_2', :record => :none t.tag '@vcr', :use_scenario_name => true end
- And
-
a file named "features/step_definitions/steps.rb" with:
require 'net/http' When /^a request is made to "([^"]*)"$/ do |url| @response = Net::HTTP.get_response(URI.parse(url)) end When /^(.*) within a cassette named "([^"]*)"$/ do |step, cassette_name| VCR.use_cassette(cassette_name) { When step } end Then /^the response should be "([^"]*)"$/ do |expected_response| @response.body.should == expected_response end
- And
-
a file named "features/vcr_example.feature" with:
Feature: VCR example Note: Cucumber treats the pre-amble as part of the feature name. When using the :use_scenario_name option, VCR will only use the first line of the feature name as the directory for the cassette. @localhost_request Scenario: tagged scenario When a request is made to "http://localhost:7777/localhost_request_1" Then the response should be "Hello localhost_request_1" When a request is made to "http://localhost:7777/nested_cassette" within a cassette named "nested_cassette" Then the response should be "Hello nested_cassette" When a request is made to "http://localhost:7777/localhost_request_2" Then the response should be "Hello localhost_request_2" @vcr Scenario: tagged scenario When a request is made to "http://localhost:7777/localhost_request_1" Then the response should be "Hello localhost_request_1" @disallowed_1 Scenario: tagged scenario When a request is made to "http://localhost:7777/allowed" within a cassette named "allowed" Then the response should be "Hello allowed" When a request is made to "http://localhost:7777/disallowed_1" @disallowed_2 Scenario: tagged scenario When a request is made to "http://localhost:7777/disallowed_2"
- And
- the directory "features/cassettes" does not exist
- When
-
I run
cucumber WITH_SERVER=true features/vcr_example.feature
- Then
- it should fail with "4 scenarios (2 failed, 2 passed)"
- And
-
the output should contain each of the following:
An HTTP request has been made that VCR does not know how to handle: GET http://localhost:7777/disallowed_1 An HTTP request has been made that VCR does not know how to handle: GET http://localhost:7777/disallowed_2 - And
- the file "features/cassettes/cucumber_tags/localhost_request.yml" should contain "Hello localhost_request_1"
- And
- the file "features/cassettes/cucumber_tags/localhost_request.yml" should contain "Hello localhost_request_2"
- And
- the file "features/cassettes/nested_cassette.yml" should contain "Hello nested_cassette"
- And
- the file "features/cassettes/allowed.yml" should contain "Hello allowed"
- And
- the file "features/cassettes/VCR_example/tagged_scenario.yml" should contain "Hello localhost_request_1"
- When
-
I run
cucumber features/vcr_example.feature
- Then
- it should fail with "4 scenarios (2 failed, 2 passed)"
- And
-
the output should contain each of the following:
An HTTP request has been made that VCR does not know how to handle: GET http://localhost:7777/disallowed_1 An HTTP request has been made that VCR does not know how to handle: GET http://localhost:7777/disallowed_2 - And
- the file "features/cassettes/cucumber_tags/localhost_request.yml" should contain "Hello localhost_request_1"
- And
- the file "features/cassettes/cucumber_tags/localhost_request.yml" should contain "Hello localhost_request_2"
- And
- the file "features/cassettes/nested_cassette.yml" should contain "Hello nested_cassette"
- And
- the file "features/cassettes/allowed.yml" should contain "Hello allowed"
- And
- the file "features/cassettes/VCR_example/tagged_scenario.yml" should contain "Hello localhost_request_1"
Last published over 7 years ago by myronmarston.