Class: Spinach::Runner::ScenarioRunner

Inherits:
Object
  • Object
show all
Defined in:
lib/spinach/runner/scenario_runner.rb

Overview

A Scenario Runner handles a particular scenario run.

Instance Method Summary collapse

Constructor Details

#initialize(scenario) ⇒ ScenarioRunner

Returns a new instance of ScenarioRunner.

Parameters:

  • scenario (GherkinRuby::AST::Scenario)

    The scenario.



10
11
12
# File 'lib/spinach/runner/scenario_runner.rb', line 10

def initialize(scenario)
  @scenario = scenario
end

Instance Method Details

#featureGherkinRuby::AST::Feature

Returns ] The feature containing the scenario.

Returns:

  • (GherkinRuby::AST::Feature)

    ] The feature containing the scenario.



18
19
20
# File 'lib/spinach/runner/scenario_runner.rb', line 18

def feature
  @scenario.feature
end

#runtrue, false

Runs the scenario, capturing any exception, and running the corresponding hooks.

Returns:

  • (true, false)

    Whether the scenario succeeded or not.

Raises:



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/spinach/runner/scenario_runner.rb', line 45

def run
  Spinach.hooks.run_before_scenario @scenario, step_definitions
  scenario_run = false
  Spinach.hooks.run_around_scenario @scenario, step_definitions do
    scenario_run = true
    step_definitions.before_each
    steps.each do |step|
      Spinach.hooks.run_before_step step, step_definitions

      if @exception || @has_pending_step
        Spinach.hooks.run_on_skipped_step step, step_definitions
      else
        run_step(step)
      end

      Spinach.hooks.run_after_step step, step_definitions
    end
    step_definitions.after_each
  end
  raise Spinach::HookNotYieldException.new('around_scenario') if !scenario_run && !@exception
  Spinach.hooks.run_after_scenario @scenario, step_definitions
  !@exception
end

#run_step(step) ⇒ Object

Runs a particular step.

Parameters:

  • step (GherkinRuby::AST::Step)

    The step to be run.



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/spinach/runner/scenario_runner.rb', line 75

def run_step(step)
  step_location = step_definitions.step_location_for(step.name)
  step_run = false
  Spinach.hooks.run_around_step step, step_definitions do
    step_run = true
    step_definitions.execute(step)
  end
  raise Spinach::HookNotYieldException.new('around_step') if !step_run
  Spinach.hooks.run_on_successful_step step, step_location, step_definitions
rescue Spinach::HookNotYieldException => e
  raise e
rescue *Spinach.config[:failure_exceptions] => e
  @exception = e
  Spinach.hooks.run_on_failed_step step, @exception, step_location, step_definitions
rescue Spinach::StepNotDefinedException => e
  @exception = e
  Spinach.hooks.run_on_undefined_step step, @exception, step_definitions
rescue Spinach::StepPendingException => e
  e.step = step
  @has_pending_step = true
  Spinach.hooks.run_on_pending_step step, e
rescue StandardError => e
  @exception = e
  Spinach.hooks.run_on_error_step step, @exception, step_location, step_definitions
end

#step_definitionsFeatureSteps

Returns The step definitions for the current feature.

Returns:

  • (FeatureSteps)

    The step definitions for the current feature.



34
35
36
# File 'lib/spinach/runner/scenario_runner.rb', line 34

def step_definitions
  @step_definitions ||= Spinach.find_step_definitions(feature.name).new
end

#stepsArray<GherkinRuby::AST::Step>

Returns An array of steps.

Returns:

  • (Array<GherkinRuby::AST::Step>)

    An array of steps.



26
27
28
# File 'lib/spinach/runner/scenario_runner.rb', line 26

def steps
  feature.background_steps + @scenario.steps
end