1

我正在为 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”捕捉错误,然后是“rescue”,最后是“rescue Exception”,但仍然抛出错误。但是,我在Ruby命令提示符下尝试了同样的事情,并且每次都捕获到异常

谁能帮我弄清楚这里发生了什么?谢谢!

4

1 回答 1

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)
于 2013-07-15T17:26:57.317 回答