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



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.



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.



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 "around_scenario hooks *must* yield" if !scenario_run && !@exception
  Spinach.hooks.run_after_scenario @scenario, step_definitions
  !@exception
end

#run_step(step) ⇒ Object

Runs a particular step.



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

def run_step(step)
  step_location = step_definitions.step_location_for(step.name)
  step_definitions.execute(step)
  Spinach.hooks.run_on_successful_step step, step_location, step_definitions
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 Exception => 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.



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.



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

def steps
  feature.background_steps + @scenario.steps
end