我的问题是,我们在SolanoCI中收到了神秘的504错误,并且我试图找到一种干净的方法,只在测试环境中处理这些错误,而不将特定于测试的代码添加到ApplicationController中。
我通过测试设置尝试了一个默认处理程序,如下所示:
allow(ApplicationController).to receive(:timeout).and_return {
#do a bunch of stuff to try to pull out request information
}
但是我发现它缺少一些可访问的重要信息,比如原始请求url和任何堆栈跟踪信息。
欢迎任何建议。
发布于 2015-09-14 21:52:28
在这种情况下,我认为最简单的方法是让Solano为您在他们的机器上运行一个调试会话 (它们允许您访问自己的服务器,这样您就可以自己运行测试)。
在这样的黑匣子情况下,这是一个实时保护程序。您可以多次运行测试,并在那里使用各种调试工具。您可能必须先安装它们,因为Solano试图不从Gemfile (如pry)安装额外的工具,以尽量减少测试的运行时间。
只要通过联系表格写下来,他们就会给你一个访问权限。不要忘了在你完成工作后停止它,因为它运行的时间是从计划中的工时中扣除的。
希望能帮上忙。
编辑:似乎匿名控制器功能非常适合您的情况:
使用
controller
方法定义将从所述类继承的匿名控制器。这对于指定诸如全局错误处理之类的行为非常有用。
所以,你可以这样做:
RSpec.describe ApplicationController, :type => :controller do
controller(ApplicationController) do
rescue_from Timeout::Error, :with => :log_timeout
def log_timeout(error)
# log error as you wish
end
end
describe "handling timeout exceptions" do
it "writes some logs" do
get :index
expect(response).to have_https_status(504)
end
end
end
https://stackoverflow.com/questions/32568847
复制相似问题