Sha256: 08d004ff94463fc6b72c164991e8cc483f5e56f17f1fd4a9feb003b153027e02

Contents?: true

Size: 1.84 KB

Versions: 1

Compression:

Stored size: 1.84 KB

Contents

module RSpec
  module Proverbs
    module ExampleGroup
      # In Rspec, example group bodies are delimited by 'describe' and
      # 'context' methods. These encapsulate examples, which are
      # delimited by 'it' methods. Example groups are evaluated in the
      # context of an ExampleGroup instance. Individual examples are
      # evaluated in the context of an instance of the ExampleGroup
      # to which they belong.
      def include_steps(*args)
        name = args.shift
        shared_block = ::RSpec.world.shared_example_steps[name]
        shared_block || raise(ArgumentError,
          "Could not find shared steps #{name.inspect}")
        instance_exec(*args, &shared_block)
      end

      def Given(message, options = {}, &block)
        action :given, message, options, &block
      end

      def When(message, options = {}, &block)
        action :when, message, options, &block
      end

      def Then(message, options = {}, &block)
        action :then, message, options, &block
      end

      def And(message, options = {}, &block)
        action :and, message, options, &block
      end

      def But(message, options = {}, &block)
        action :but, message, options, &block
      end

      private

      def action(type, message, options = {}, &_block)
        ::RSpec.world.reporter.example_step_started(self, type, message, options)
        options = { pending: true } if options == :pending

        if block_given? && !options[:pending]
          begin
            yield
          rescue Exception => e
            ::RSpec.world.reporter.example_step_failed(self, type, message, options)
            raise e
          end
          ::RSpec.world.reporter.example_step_passed(self, type, message, options)
        else
          ::RSpec.world.reporter.example_step_pending(self, type, message, options)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
proverbs-0.1.0 lib/proverbs/rspec/example_group.rb