Class: Spinach::Runner

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

Overview

Runner gets the parsed data from the feature and performs the actual calls to the feature classes.

Direct Known Subclasses

Auditor

Defined Under Namespace

Classes: FeatureRunner, ScenarioRunner

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filenames, options = {}) ⇒ Runner

Initializes the runner with a parsed feature

Parameters:

  • filenames (Array<String>)

    A list of feature filenames to run

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :step_definitions_path (String)

    The path in which step definitions are found.

  • :support_path (String)

    The path with the support ruby files.



30
31
32
33
34
35
36
37
38
# File 'lib/spinach/runner.rb', line 30

def initialize(filenames, options = {})
  @filenames = filenames

  @step_definitions_path = options.delete(:step_definitions_path) ||
    Spinach.config.step_definitions_path

  @support_path = options.delete(:support_path) ||
    Spinach.config.support_path
end

Instance Attribute Details

#filenamesObject (readonly)

The feature files to run



8
9
10
# File 'lib/spinach/runner.rb', line 8

def filenames
  @filenames
end

#step_definitions_pathObject (readonly)

The default path where the steps are located



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

def step_definitions_path
  @step_definitions_path
end

#support_pathObject (readonly)

The default path where the support files are located



14
15
16
# File 'lib/spinach/runner.rb', line 14

def support_path
  @support_path
end

Instance Method Details

#default_reporter_optionsObject

Default initialization options for the reporter



143
144
145
# File 'lib/spinach/runner.rb', line 143

def default_reporter_options
  {orderer: orderer}
end

#init_reportersObject

Inits the reporter with a default one.



43
44
45
46
47
48
49
50
# File 'lib/spinach/runner.rb', line 43

def init_reporters
  Spinach.config[:reporter_classes].each do |reporter_class|
    reporter_options = default_reporter_options.merge(Spinach.config.reporter_options)
    reporter         = Support.constantize(reporter_class).new(reporter_options)

    reporter.bind
  end
end

#ordererObject

The orderer for this run.



135
136
137
138
139
# File 'lib/spinach/runner.rb', line 135

def orderer
  @orderer ||= Support.constantize(Spinach.config[:orderer_class]).new(
    seed: Spinach.config.seed
  )
end

#require_dependenciesObject

Loads support files and step definitions, ensuring that env.rb is loaded first.



83
84
85
86
87
# File 'lib/spinach/runner.rb', line 83

def require_dependencies
  required_files.each do |file|
    require file
  end
end

#require_frameworksObject

Requires the test framework support



91
92
93
# File 'lib/spinach/runner.rb', line 91

def require_frameworks
  require_relative 'frameworks'
end

#required_filesArray<String>

Returns files All support files with env.rb ordered first, followed by the step definitions.

Returns:

  • (Array<String>)

    files All support files with env.rb ordered first, followed by the step definitions.



128
129
130
# File 'lib/spinach/runner.rb', line 128

def required_files
  support_files + step_definition_files
end

#runtrue, false

Runs this runner and outputs the results in a colorful manner.

Returns:

  • (true, false)

    Whether the run was succesful.



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/spinach/runner.rb', line 58

def run
  require_dependencies
  require_frameworks
  init_reporters

  suite_passed = true

  Spinach.hooks.run_before_run

  features_to_run.each do |feature|
    feature_passed = FeatureRunner.new(feature, orderer: orderer).run
    suite_passed &&= feature_passed

    break if fail_fast? && !feature_passed
  end

  Spinach.hooks.run_after_run(suite_passed)

  suite_passed
end

#step_definition_filesArray<String>

Returns an array of files to be required. Sorted by the most nested files first, then alphabetically.

Returns:

  • (Array<String>)

    files The step definition files.



100
101
102
103
104
# File 'lib/spinach/runner.rb', line 100

def step_definition_files
  Dir.glob(
    File.expand_path File.join(step_definitions_path, '**', '*.rb')
  ).sort{|a,b| [b.count(File::SEPARATOR), a] <=> [a.count(File::SEPARATOR), b]}
end

#support_filesArray<String>

Returns an array of support files inside the support_path. Will put “env.rb” in the beginning

Returns:

  • (Array<String>)

    files The support files.



113
114
115
116
117
118
119
120
121
# File 'lib/spinach/runner.rb', line 113

def support_files
  support_files = Dir.glob(
    File.expand_path File.join(support_path, '**', '*.rb')
  )
  environment_file = support_files.find do |f|
    f.include?(File.join support_path, 'env.rb')
  end
  support_files.unshift(environment_file).compact.uniq
end