Sha256: 3cdb114274458327d5d0cf09c16e707e41d406d2e0ab516ea22ea5ec90880431

Contents?: true

Size: 1.98 KB

Versions: 10

Compression:

Stored size: 1.98 KB

Contents

module VCR
  # Provides integration with Cucumber using tags.
  class CucumberTags
    class << self
      # @private
      def tags
        @tags.dup
      end

      # @private
      def add_tag(tag)
        @tags << tag
      end
    end

    @tags = []

    # @private
    def initialize(main_object)
      @main_object = main_object
    end

    # Adds `Before` and `After` cucumber hooks for the named tags that
    # will cause a VCR cassette to be used for scenarios with matching tags.
    #
    # @param [Array<String>] tag_names the cucumber scenario tags
    # @param [(optional) Hash] options the cassette options. Specify
    #   `:use_scenario_name => true` to automatically name the
    #   cassette according to the scenario name.
    def tags(*tag_names)
      original_options = 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|
          options = original_options.dup

          cassette_name = if options.delete(:use_scenario_name)
            feature = scenario.respond_to?(:scenario_outline) ? scenario.scenario_outline.feature : scenario.feature
            name = feature.name.split("\n").first
            name << "/#{scenario.scenario_outline.name}" if scenario.respond_to?(:scenario_outline)
            name << "/#{scenario.name.split("\n").first}"
            name
          else
            "cucumber_tags/#{tag_name.gsub(/\A@/, '')}"
          end

          VCR.insert_cassette(cassette_name, options)
        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
    alias :tag :tags
  end
end

Version data entries

10 entries across 10 versions & 4 rubygems

Version Path
dwolla_swagger-1.0.6 vendor/bundle/ruby/2.2.0/gems/vcr-2.9.3/lib/vcr/test_frameworks/cucumber.rb
mustwin-vcr-2.9.3 lib/vcr/test_frameworks/cucumber.rb
vcr-2.9.3 lib/vcr/test_frameworks/cucumber.rb
vcr-2.9.2 lib/vcr/test_frameworks/cucumber.rb
vcr-2.9.1 lib/vcr/test_frameworks/cucumber.rb
vcr-2.9.0 lib/vcr/test_frameworks/cucumber.rb
social_url_stats-0.0.1 vendor/ruby/1.9.1/gems/vcr-2.8.0/lib/vcr/test_frameworks/cucumber.rb
vcr-2.8.0 lib/vcr/test_frameworks/cucumber.rb
vcr-2.7.0 lib/vcr/test_frameworks/cucumber.rb
vcr-2.6.0 lib/vcr/test_frameworks/cucumber.rb