This is the latest version of our README.md (main branch).
Aruba is an extension for popular TDD and BDD frameworks like Cucumber, RSpec and Minitest to make testing of command line applications meaningful, easy and fun.
Your benefits:
- Test any command line application implemented in any programming language – e.g. Bash, Python, Ruby, Java, ...
- Manipulate the file system and the process environment with helpers working similarly to tools you may know from your shell
- No worries about leaking state: The file system and the process environment will be reset between tests
- Support by a helpful and welcoming community – see our Code of Conduct
- The documentation is our contract with you. You can expect Aruba to work as documented
Our Vision:
- Help our users to build better command line applications written in any programming language
- Make creating documentation for command line applications simple and fun
- Support the cucumber community in its effort to create a specification for all official cucumber implementations
Our Focus:
- Test the user-interaction with the commands at runtime – this excludes
the process of installation/deployment of commands like installing Rubygems
with
gem install <your-gem>
.
Add this line to your application's Gemfile
:
gem 'aruba'
And then execute:
bundle
Or install it yourself as:
gem install aruba
Note: Please also see this feature test for the most up to date documentation.
-
Clone the "Getting Started" application and make the cloned repository your current working directory
git clone https://github.com/cucumber/aruba-getting-started.git cd aruba-getting-started
-
Install the required dependencies
bundle install
-
Create a file named
features/support/env.rb
with:require 'aruba/cucumber'
-
Create a file named
features/use_aruba_with_cucumber.feature
with:Feature: Cucumber Scenario: First Run Given a file named "file.txt" with: """ Hello, Aruba! """ When I run `aruba-test-cli file.txt` Then the file "file.txt" should contain: """ Hello, Aruba! """
-
Run
cucumber
bundle exec cucumber
-
Add the following line to the
spec/spec_helper.rb
file.require 'aruba/rspec'
-
Create a file 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, Aruba!' } before { write_file file, content } before { run_command('aruba-test-cli file.txt') } # Full string it { expect(last_command_started).to have_output content } # Substring it { expect(last_command_started).to have_output(/Hello/) } end
-
Run
rspec
bundle exec rspec
-
Add the following line to the
test/test_helper.rb
file.require 'aruba/api'
-
Add a file named
test/use_aruba_with_minitest.rb
with:require 'test_helper' require 'minitest/autorun' class FirstRun < Minitest::Test include Aruba::Api def setup setup_aruba end def test_getting_started_with_aruba file = 'file.txt' content = 'Hello, Aruba!' write_file file, content run_command_and_stop 'aruba-test-cli file.txt' assert_equal last_command_started.output.chomp, content end end
-
Run your tests
bundle exec ruby -I lib:test test/use_aruba_with_minitest.rb
A full documentation of the API can be found here.
Development for the upcoming 1.0.0 release takes place in the main
branch.
Maintenance of the current 0.14.x releases takes place in the 0-14-stable
branch. After the 1.0.0 release, development will take place in the main
branch as much as possible. Stable branches will not be created until
absolutely necessary.
There's an initializer to make it easier for you to get started.
-
Go to your project's directory
-
Make sure it's under version control and all changes are committed to your version control repository
-
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
orminitest
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
Copyright (c) 2010-2020 Aslak Hellesøy et al. See MIT License for details.