Class: VCR::CucumberTags
- Inherits:
-
Object
- Object
- VCR::CucumberTags
- Defined in:
- lib/vcr/test_frameworks/cucumber.rb
Overview
Provides integration with Cucumber using tags.
Instance Method Summary collapse
-
#tags(*tag_names) ⇒ Object
(also: #tag)
Adds
Before
andAfter
cucumber hooks for the named tags that will cause a VCR cassette to be used for scenarios with matching tags.
Instance Method Details
#tags(*tag_names) ⇒ Object Also known as: tag
Adds Before
and After
cucumber hooks for the named tags that
will cause a VCR cassette to be used for scenarios with matching tags.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/vcr/test_frameworks/cucumber.rb', line 30 def (*tag_names) = tag_names.last.is_a?(::Hash) ? tag_names.pop : {} tag_names.each do |tag_name| tag_name = "@#{tag_name}" unless tag_name =~ /\A@/ # It would be nice to use an Around hook here, but # cucumber has a bug: background steps do not run # within an around hook. # https://gist.github.com/652968 @main_object.Before(tag_name) do |scenario| = .dup cassette_name = if .delete(:use_scenario_name) if scenario.respond_to?(:outline?) && scenario.outline? ScenarioNameBuilder.new(scenario).cassette_name elsif scenario.respond_to?(:scenario_outline) [ scenario.scenario_outline.feature.name.split("\n").first, scenario.scenario_outline.name, scenario.name.split("\n").first ].join("/") elsif scenario.respond_to?(:feature) [ scenario.feature.name.split("\n").first, scenario.name.split("\n").first ].join("/") elsif scenario.location.lines.min == scenario.location.lines.max # test case from a regular scenario in cucumber version 4 [ scenario.location.file.split("/").last.split(".").first, scenario.name.split("\n").first ].join("/") else # test case from a scenario with examples ("scenario outline") in cucumber version 4 [ scenario.location.file.split("/").last.split(".").first, scenario.name.split("\n").first, "Example at line #{scenario.location.lines.max}" ].join("/") end else "cucumber_tags/#{tag_name.gsub(/\A@/, '')}" end VCR.insert_cassette(cassette_name, ) end @main_object.After(tag_name) do |scenario| VCR.eject_cassette(:skip_no_unused_interactions_assertion => scenario.failed?) end self.class.add_tag(tag_name) end end |