자신을 죽여라! 신호를 Process.kill 'TERM', 0
으로 RSpec에 전송하고 핸들러가 호출되는지 테스트합니다. 신호가 갇히지 않으면 실패를 잘보고하기보다는 테스트가 중단되지만 적어도 코드에 문제가 있음을 알 수 있습니다. 예를 들어
는 :
class SignalHandler
def self.trap_signals
Signal.trap('TERM') { term_handler }
end
def self.term_handler
# ...
end
end
describe SignalHandler do
describe '#trap_signals' do
it "traps TERM" do
# The MRI default TERM handler does not cause RSpec to exit with an error.
# Use the system default TERM handler instead, which does kill RSpec.
# If you test a different signal you might not need to do this,
# or you might need to install a different signal's handler.
old_signal_handler = Signal.trap 'TERM', 'SYSTEM_DEFAULT'
SignalHandler.trap_signals
expect(SignalHandler).to receive(:term_handler).with no_args
Process.kill 'TERM', 0 # Send the signal to ourself
# Put the Ruby default signal handler back in case it matters to other tests
Signal.trap 'TERM', old_signal_handler
end
end
end
나는 단지 핸들러가 호출 된 것을 테스트,하지만 당신은 동일하게 핸들러의 부작용을 테스트 할 수 있습니다.