How can I validate exits and aborts in RSpec?
Using the new RSpec syntax:
expect { code_that_exits }.to raise_error(SystemExit)
If something is printed to STDOUT and you want to test that too, you can do something like:
context "when -h or --help option used" do
it "prints the help and exits" do
help = %Q(
Usage: my_app [options]
-h, --help Shows this help message
)
ARGV << "-h"
expect do
output = capture_stdout { my_app.execute(ARGV) }
expect(output).to eq(help)
end.to raise_error(SystemExit)
ARGV << "--help"
expect do
output = capture_stdout { my_app.execute(ARGV) }
expect(output).to eq(help)
end.to raise_error(SystemExit)
end
end
Where capture_stdout
is defined as seen in
Test output to command line with RSpec.
Update: Consider using RSpec's output
matcher instead of capture_stdout
try this:
module MyGem
describe "CLI" do
context "execute" do
it "should exit cleanly when -h is used" do
argv=["-h"]
out = StringIO.new
lambda { ::MyGem::CLI.execute( out, argv) }.should raise_error SystemExit
end
end
end
end