如何在rspec上编写陷阱处理规范?

时间:2017-11-16 20:07:30

标签: ruby-on-rails ruby error-handling rspec signals

说我有一个陷阱SIGTERM的类,我想编写一个规范来验证在收到SIGTERM时是否运行了该特定代码。这样做的正确方法是什么? 我已经按照这个主题的答案:How to test signal handling in RSpec, particularly handling of SIGTERM?,但是在Process.kill上发生了rspec终止。
我也尝过这样的话:

raise SignalException.new('TERM') 

但它似乎没有做任何事情(没有触发陷阱)。 Finnaly,我已经尝试过使用'允许'替换在规范期间调用的方法来提升信号或调用Process.kill,如下所示:

allow(<Class>).to receive(<method>).and_raise(SignalException.new('TERM'))
allow(<Class>).to receive(<method>).and_return(Process.kill 'TERM',0)

当提升信号时,它似乎也没有做任何事情,并且调用Process.kill只是在没有堆栈跟踪的情况下结束rspec,只是单词“终止&#39;”。 陷阱代码如下:

trap('SIGTERM') {
    Rails.logger.error('term')
    @received_sigterm = true
}

0 个答案:

没有答案