Highline::Test
A micro framework to help you test your HighLine applications.
HighLine allows you to supply your own input and output streams (instead of the default STDIN and STDOUT). This fact facilitates testing, allowing you to use StringIO objects for input and output.
The problem with this approach is that it is hard to seperate the test, which pushes data to the input stream, and the application which reads that data.
HighLine::Test resolves this problem by forking the test process. One fork runs the tests, the other runs the application. The two processes communicate via pipes.
HighLine::test can be used with any testing framework, e.g.
- RSpec
- Test::Unit
- Cucumber
Installation
Add this line to your application's Gemfile:
gem 'highline-test'
And then execute:
$ bundle
Or install it yourself as:
$ gem install highline-test
Usage
require 'highline/test'
before do
# Before running a test, create a HighLine::Test::Client
@client = HighLine::Test::Client.new
# The application itself is started in a block passed to the #run method
@client.run do |driver|
# This block is run in a child process
# The HighLine instance used by the application *must* be the one supplied by
# the client.
HighLine.stub(:new).and_return(@client.high_line)
# Do any other setup (e.g. stubbing) here
# Start the application under test
MyApp.new.run
# If this block ever completes, the child process will be killed by
# HighLine::Test
end
end
after do
# Ensure the child process is cleaned up
@client.cleanup
end
it 'says Hello' do
# Send text input to the application
@client.type 'Fred'
# Test application output
expect(@client.output).to include('Hello Fred!')
end
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request