我正在为Ruby Rails应用程序编写测试,并且我有一块代码块,如果Ruby无法连接到它,它应该能够捕获我的Redis服务器抛出的错误。目前,代码如下所示:
begin
config.before(:all) { Resque.redis.select 1 }
config.after(:all) { Resque.redis.keys("queue:*").each { |key| Resque.redis.del key } }
rescue Exception
puts "RESCUED REDIS ERROR"
end
根据我尝试运行测试时的堆栈跟踪,该代码片段的第二行 - config.before(:all){...} - 抛出 Redis :: CannotConnectError 。在经过很多“e.class.superclass.superclass ...”命令之后,我确定这个错误继承自StandardError。
之后我卡住了。我尝试用“rescue Redis :: CannotConnectError”捕获错误,然后“救援”,最后“救援Exception”,但仍然抛出错误。但是,我在Ruby命令提示符中尝试了相同的操作,并且每次都会捕获异常
有谁能帮我弄清楚这里发生了什么?谢谢!
答案 0 :(得分:1)
问题是传递给before
和after
的块在定义时没有被执行;相反,它们被存储,然后在每个规范文件运行之前和之后由Rspec调用。
您可能希望在块内移动开始/救援:
config.before(:all) do
begin
Resque.redis.select 1
rescue Exception
puts "RESCUED REDIS ERROR"
end
end
# same for config.after(:all)