Class: Spinach::Runner::ScenarioRunner
- Inherits:
-
Object
- Object
- Spinach::Runner::ScenarioRunner
- Defined in:
- lib/spinach/runner/scenario_runner.rb
Overview
A Scenario Runner handles a particular scenario run.
Instance Method Summary collapse
-
#feature ⇒ GherkinRuby::AST::Feature
] The feature containing the scenario.
-
#initialize(scenario) ⇒ ScenarioRunner
constructor
A new instance of ScenarioRunner.
-
#run ⇒ true, false
Runs the scenario, capturing any exception, and running the corresponding hooks.
-
#run_step(step) ⇒ Object
Runs a particular step.
-
#step_definitions ⇒ FeatureSteps
The step definitions for the current feature.
-
#steps ⇒ Array<GherkinRuby::AST::Step>
An array of steps.
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
#feature ⇒ GherkinRuby::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 |
#run ⇒ true, 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 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.
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_definitions ⇒ FeatureSteps
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 |
#steps ⇒ Array<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 |