Gem Version Build Status Dependency Status Coverage Status

cukesparse

A simple command line parser to pass default and custom arguments into Cucumber with the power to define these as tasks in a config/tasks.yml file!

Getting Started

Cukesparse parses command line arguments and sets default arguments from the config/task.yml file. For example please see the full list of options within the example config below:

test_task:
 feature_order: ['features/featureOne', 'features/featureTwo', 'features/featureThree']

 # These cucumber defaults will be set if not passed in from cli
 cucumber_defaults:
  format: 'pretty'
  name: ['feature1', 'feature2']
  tags: ['tags1', 'tags2']
  strict: true
  verbose: true
  dry_run: true
  guess: true
  expand: true

 # These runtime defaults will be set if not passed in from cli
 runtime_defaults:
  environment: 'release'
  log_level: 'debug'
  cleanup: true
  database: true
  jenkins: true
  retries: 5
  timeout: 60
  screen: 1280/1024
  screenwidth: 1280
  screenheight: 1024
  position: 0/0
  xposition: 0
  yposition: 0
  highlight: true

 # Will always be added to end of of the system command
 defaults: ['--format html', '--out report.html', '-P -s']

You can have many highlevel tasks defined within your config/tasks.yml file. In the above example we only have the task test_task. Please note that the screen and position config options will set screenwidth/screenheight or xposition/yposition parameters. You should use screen/position or define the individual options only within the config file!

Lets get it running!

Lets say we have the following simple config file options defined:

test_task:
 feature_order: ['features/featureOne', 'features/featureTwo', 'features/featureThree']
 cucumber_defaults:
  format: 'pretty'
 runtime_defaults:
  environment: 'release'
  log_level: 'debug'
 defaults: ['--format html', '--out coverage/report.html', '-P -s']

If you were to run the following command cukesparse test_task -t test cukesparse would be passed the following arguments:

  ["test_task", "-t", "test"]

Cukesparse would then collate and produce the following parameters hash:

{:tags=>["--tags test"], :format=>"--format pretty", :environment=>"ENVIRONMENT=release", :log_level=>"LOG_LEVEL=debug"}

As no environment, log_level arguments were passed the runtime defaults from the config/tasks.yml are used. The following command line output would be produced and run:

bundle exec cucumber --require features/ features/featureOne features/featureTwo features/featureThree --tags test
ENVIRONMENT=release LOG_LEVEL=debug FORMAT=pretty --format html --out coverage/report.html -P -s

See tasks from CLI

If you need to view the tasks within config file from the command line just type: cukesparse tasks

Parameters

Cukesparse accepts the following command line arguments:

Cucumber options

'-t'                e.g. -t @abc
'-n --name'         e.g. -n 
'-f --format'       e.g. -f pretty
'-d --dry-run'
'-v --verbose'
'-s --strict'
'-g --guess'
'-x --expand'

Runtime options

All arguments below have been setup for a custom project but are useful.

Global options

'-e --environment'  e.g. -e release
'-l --loglevel'     e.g. -l debug
'-c --controller'   e.g. -c chrome
'-h --headless'

Database options

'--cleanup'
'--no-cleanup'
'--database'
'--jenkins'

Retry options

'--retries'         e.g. --retries 5
'--timeout'         e.g. --timeout 60

Driver Options

'--screen'          e.g. --screen 1024/1280
'--position'        e.g. --position 0/0
'--screenwidth'     e.g. --screenwidth 1024
'--screenheight'    e.g. --screenheight 1280
'--xposition'       e.g. --xposition 0
'--yposition'       e.g. --yposition 0
'-H --highlight'

Debug

The command line option below parses the arguments and displays the original arguments that were passed, the parameters created and the command line that would be passed to system. When the --debug argument is passed it only outputs what would have been produced and isn't run.

'--debug'

So for example if you ran the following:

cukesparse test_task -t test --debug

You would get the following returned in the console:

DEBUG: Outputting ARGV passed
["test_task", "-t", "test", "--debug"]

DEBUG: Outputting parsed config file
{"test_task"=>{"feature_order"=>["features/featureOne", "features/featureTwo", "features/featureThree"], "cucumber_defaults"=>{"format"=>"pretty"}, "runtime_defaults"=>{"environment"=>"release", "log_level"=>"debug"}, "defaults"=>["--format html", "--out coverage/report.html", "-P -s"]}}

DEBUG: Outputting parameters created
{:tags=>["--tags test"], :debug=>"DEBUG=TRUE", :format=>"--format pretty", :environment=>"ENVIRONMENT=release", :log_level=>"LOG_LEVEL=debug"}

DEBUG: Outputting command created
bundle exec cucumber --require features/ features/featureOne features/featureTwo features/featureThree --tags test DEBUG=TRUE --format pretty ENVIRONMENT=release LOG_LEVEL=debug --format html --out coverage/report.html -P -s

Tests

There are a number of unit tests which are included as part of this project which are run by rspec. Please run:

  rspec spec/

Feedback

I would be more than happy to recieve feedback, please email me at: jonathan.chrisp@gmail.com