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

- (ScenarioRunner) initialize(scenario)

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

- (GherkinRuby::AST::Feature) 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

- (true, false) run

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

Returns:

  • (true, false)

    Whether the scenario succeeded or not.



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

- (Object) run_step(step)

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
# 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

- (FeatureSteps) step_definitions

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

- (Array<GherkinRuby::AST::Step>) steps

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