Skip to content
Test command-line applications with Cucumber-Ruby, RSpec or Minitest
Ruby Cucumber Other
Latest commit 8119ba2 @dg-ratiodata dg-ratiodata Version bump
Failed to load latest commit information.
bin Add console support to aruba
config Moved configuration of rubocop to a central place
doc Add license finder to check licenses of aruba
features Output information on command failure
fixtures Split up feature
lib Version bump
script Check if default shells used in tests are installed on developer pc
spec Only needed defaults
templates Updating Vendored JQuery
.document Initial commit to aruba.
.gitignore Fixed bootstrap script
.rspec Use the fuubar formatter to see progress of rspec
.rubocop.yml Make cd work with run
.simplecov Ignore specs and features in simplecov
.travis.yml Fixed flags introduced accidently by last PR
.yardopts Added a proper .yardopts file Add Dennis to the list of contributors
Gemfile Replace internal event queue with event-bus from library Version bump
LICENSE Update year in license Update year in readme
Rakefile Fixed circular warnings Added tasks to TODO file
appveyor.yml Fixed path to executable
aruba.gemspec Re-integrate code of event-bus library
cucumber.yml Add some new matchers to make it easier to write steps for cucumber

Gem Version Dependency Status Code Climate Join the chat at

Build status:

Linux / OS X Windows
Build Status Build status

aruba is an extension for popular TDD and BDD frameworks like "Cucumber", "RSpec" and "Minitest" to make testing of commandline applications meaningful, easy and fun.

Features at a glance:

  • Test any command line application, implemented in any programming language - e.g. Bash, Python, Ruby, Java, ...
  • Manipulate the file system and the process environment
  • Automatically reset state of file system and process environment between tests


Add this line to your application's Gemfile:

gem 'aruba'

And then execute:

$ bundle

Or install it yourself as:

$ gem install aruba

Release Policy

We try to be compliant to Semantic Versioning 2.0.0.

Supported ruby versions

For an up to date list of all supported ruby versions, please see our .travis.yml. We only test against the latest version of a version branch - most times.


Please also see this feature test for the most up to date documentation.

Initialize your project with "aruba"

There's an initializer to make it easier for you to getting started. If you prefer to setup aruba yourself, please move on to the next section.

  1. Go to your project's directory

  2. Make sure, it's under version control and all changes are committed to your version control repository

  3. Run one of the following commands depending on the tools you use to test your project.

    This assumes, that you use either rspec, cucumber-ruby or minitest to write the tests for your project. Besides that, your tool can be implemented in any programming language you like.

    aruba init --test-framework rspec
    aruba init --test-framework cucumber
    aruba init --test-framework minitest


  1. Create a file named "features/support/env.rb" with:

    require 'aruba/cucumber'
  2. Create a file named "features/use_aruba_with_cucumber.feature" with:

    Feature: Cucumber
     Scenario: First Run
       Given a file named "file.txt" with:
       Hello World
       Then the file "file.txt" should contain:
       Hello World
  3. Run cucumber


  1. Create a file named "spec/support/aruba.rb" with:

    require 'aruba/rspec'
  2. Create a file named "spec/spec_helper.rb" with:

    $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
    if RUBY_VERSION < '1.9.3'
     ::Dir.glob(::File.expand_path('../support/**/*.rb', __FILE__)).each { |f| require File.join(File.dirname(f), File.basename(f, '.rb')) }
     ::Dir.glob(::File.expand_path('../support/**/*.rb', __FILE__)).each { |f| require_relative f }
  3. Create a file named named "spec/use_aruba_with_rspec_spec.rb" with:

    require 'spec_helper'
    RSpec.describe 'First Run', :type => :aruba do
     let(:file) { 'file.txt' }
     let(:content) { 'Hello World' }
     before(:each) { write_file file, content }
     it { expect(read(file)).to eq [content] }
  4. Run rspec


  1. Add a file named "test/support/aruba.rb" with:

    require 'aruba/api'
  2. Add a file named "test/test_helper.rb" with:

    $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
    if RUBY_VERSION < '1.9.3'
     ::Dir.glob(::File.expand_path('../support/**/*.rb', __FILE__)).each { |f| require File.join(File.dirname(f), File.basename(f, '.rb')) }
     ::Dir.glob(::File.expand_path('../support/**/*.rb', __FILE__)).each { |f| require_relative f }
  3. Add a file named "test/use_aruba_with_minitest.rb" with:

    $LOAD_PATH.unshift File.expand_path('../test', __FILE__)
    require 'test_helper'
    require 'minitest/autorun'
    class FirstRun < Minitest::Test
     include Aruba::Api
     def setup
     def getting_started_with_aruba
       file = 'file.txt'
       content = 'Hello World' 
       write_file file, content
       read(file).must_equal [content]
  4. Run your tests

    ruby -Ilib:test test/use_aruba_with_minitest.rb


User Documentation

If you're interested in our steps and API, please browser our feature files. You can find a lot of examples there. A good starting point are Getting Started and Step Overview. A more or less full list of our steps can be found here. Our API is documentated here and some more information about how to configure aruba, can be found here. The "RSpec" matchers provided by aruba, are documented here.

You can find our documentation on Relish as well. Unfortunately "Relish" does not like the way we structered our feature tests. So this documentation found there may be not complete.

Developer Documentation

aruba provides a wonderful API to be used in your tests:

  • Creating files/directories
  • Deleting files/directories
  • Checking file size
  • Checking file existence/absence
  • ...

A full documentation of the API can be found here.


Please see the CONTRIBUTING file.


Copyright (c) 2010-2016 Aslak Hellesøy et al. See MIT License for details.

Something went wrong with that request. Please try again.