说我有一个陷阱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
}