My Ruby program reads lines from stdin
and uses puts
to print to stdout
(the terminal). Can I use RSpec to test the reads and writes?
With RSpec 3.0, there is output matcher for this purpose:
expect { my_method }.to output("my message").to_stdout
expect { my_method }.to output("my error").to_stderr
You can use mocks and have the method called more than once by listing multiple values in the and_return()
method. These will be returned, one on each call, in the order given.
STDIN.should_receive(:read).and_return("Your string")
STDIN.should_receive(:read).and_return("value1", "value2", "value3")
You can do similar things with STDOUT:
STDOUT.should_receive(:puts).with("string")
See the RSpec mocking documentation for more information.