module Turnip::RSpec

Public Class Methods

run(feature_file) click to toggle source
# File lib/turnip/rspec.rb, line 66
      def run(feature_file)
        feature = Turnip::Builder.build(feature_file)

        return nil if feature.nil?

        instance_eval <<-EOS, feature_file, feature.line
          context = ::RSpec.describe feature.name, feature.metadata_hash
          run_scenario_group(context, feature, feature_file)
        EOS
      end

Private Class Methods

run_scenario_group(context, group, filename) click to toggle source

@param [RSpec::ExampleGroups] context @param [Turnip::Node::Feature|Turnip::Node::Rule] group @param [String] filename

# File lib/turnip/rspec.rb, line 84
      def run_scenario_group(context, group, filename)
        background_steps = group.backgrounds.map(&:steps).flatten

        context.before do
          background_steps.each do |step|
            run_step(filename, step)
          end
        end

        group.scenarios.each do |scenario|
          step_names = (background_steps + scenario.steps).map(&:to_s)
          description = step_names.join(' -> ')

          context.describe scenario.name, scenario.metadata_hash do
            instance_eval <<-EOS, filename, scenario.line
              it description do
                scenario.steps.each do |step|
                  run_step(filename, step)
                end
              end
            EOS
          end
        end

        if group.is_a?(Turnip::Node::Feature)
          group.rules.each do |rule|
            rule_context = context.context(rule.name, { turnip: true })
            run_scenario_group(rule_context, rule, filename)
          end
        end
      end