class Quke::CukeRunner

Handles executing Cucumber, including sorting the arguments we pass to it

Public Class Methods

new(passed_in_args = []) click to toggle source

When an instance of CukeRunner is initialized it will take the arguments passed in and combine them with its own default args. Those args are a mix of ones specific to ParallelTests, and ones for Cucumber.

In essence we are getting ParallelTests to pass the following to Cucumber along with whatever args are passed in when Quke is called.

[my_features_folder, '-r', 'lib/features', '-r', my_features_folder]

Its these args that pass our features directory to cucumber along with the user's. So to break it down

- +my_features_folder+, first arg tells Cucumber where the feature files
    are located
- +-r 'lib/features'+, tells Cucumber to require our features folder.
    This is how we get it to use our +env.rb+ which handles all the
    setup on behalf of the user (the point of Quke) to do things like
    use Browserstack, or switch between running against Chrome or
    firefox locally
- +-r my_features_folder+, if you specify a different folder for
    or wish to test just specific features, you are required by Cucumber
    to also require the folder which contains your steps. So we always
    set this to be sure to handle tagged scenarios, or features run in
    parallel.
# File lib/quke/cuke_runner.rb, line 34
def initialize(passed_in_args = [])
  Quke.config = Configuration.new
  @args = Quke.config.parallel.command_args(passed_in_args)
end

Public Instance Methods

run() click to toggle source

Executes ParallelTests, which in turn executes Cucumber passing in the arguments defined when the instance of CukeRunner was initialized.

# File lib/quke/cuke_runner.rb, line 41
def run
  ParallelTests::CLI.new.run(@args)
rescue SystemExit => e
  # Cucumber calls @kernel.exit() killing your script unless you rescue
  raise StandardError, "Cucumber exited in a failed state" unless e.success?
end