Skip to content

Instantly share code, notes, and snippets.

@nirnaeth
Forked from mmasashi/exit_code_matches.rb
Created May 26, 2020 19:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nirnaeth/6f961059e0e776fee5ae4f298bfb1270 to your computer and use it in GitHub Desktop.
Save nirnaeth/6f961059e0e776fee5ae4f298bfb1270 to your computer and use it in GitHub Desktop.
Exit code matcher for rspec 3
RSpec::Matchers.define :terminate do |code|
actual = nil
def supports_block_expectations?
true
end
match do |block|
begin
block.call
rescue SystemExit => e
actual = e.status
end
actual and actual == status_code
end
chain :with_code do |status_code|
@status_code = status_code
end
failure_message_for_should do |block|
"expected block to call exit(#{status_code}) but exit" +
(actual.nil? ? " not called" : "(#{actual}) was called")
end
failure_message_for_should_not do |block|
"expected block not to call exit(#{status_code})"
end
description do
"expect block to call exit(#{status_code})"
end
def status_code
@status_code ||= 0
end
end
describe HerpDerps do
it 'exits cleanly' do
# expecting call to `exit`
-> expect{ described_class.run }.to terminate
end
it 'exits with non-zero status code' do
#expecting call to `abort` or `exit(false)`
-> expect{ described_class.run }.to terminate.with_code(1)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment