Testing $HOME with Cucumber and Aruba
Scenario: Exit with 0 when no examples are run Given a file named "a_no_examples_spec.rb" with: """ruby """ When I run `rspec a_no_examples_spec.rb` Then the exit status should be 0 And the output should contain "0 examples"
This example was taken from rspec-core.
Aruba basically does three things for you:
- Create and inspect files and directories
- Run commands
- Inspect output and exit status
Now, if you are writing a CLI that interacts with a configuration file in the user’s home directory, you’d write a cucumber like this:
Scenario: use .my-app configuration Given a file named "~/.my-app" with: """ awesome_enabled: true """ When I run `my-app` Then the output should contain "AWESOME"
But how does your app and Aruba differentiate between this generated test file and your actual configration file in your home directory? It doens’t.
The solution is quite easy and elegant, in your
Before set the
$HOME environment variable to a custom location inside the
Before do set_env 'HOME', File.expand_path(File.join(current_dir, 'home')) FileUtils.mkdir_p ENV['HOME'] end
This will set
tmp/aruba/home in the context of your cucumbers (and execute binary).
current_dir automatically points to the right location for the aruba temporary directory.