当我运行功能测试时,如何在Ruby on Rails应用程序中禁用救援处理程序?

Sim*_*ide 5 unit-testing ruby-on-rails exception rescue

我的Ruby on Rails应用程序中有许多控制器,在操作结束时有一个救援处理程序,基本上可以捕获任何未处理的错误并返回某种"用户友好"错误.但是,当我进行rake测试时,我希望禁用那些默认的救援处理程序,这样我就可以看到完整的错误和堆栈跟踪.有没有自动化的方法来做到这一点?

更新澄清:我有这样的行动:

def foo
  # do some stuff...
rescue
  render :text => "Exception: #{$!}" # this could be any kind of custom render
end
Run Code Online (Sandbox Code Playgroud)

现在,当我对此进行功能测试时,如果异常被提出,那么我将获得关于异常的一些信息,但我想要的是它的行为好像那里没有救援处理程序,所以我获取完整的调试信息.

更新:解决方案

我这样做了:

  rescue:
    raise unless Rails.env.production?
    render :text => "Exception: #{$!}" # this could be any kind of custom render
  end
Run Code Online (Sandbox Code Playgroud)

nio*_*ioq 9

不是很自动化,但是如何修改代码以在测试中调用时重新抛出异常?

也许是这样的:

def foo
  # do some stuff...
rescue
  raise if ENV["RAILS_ENV"] == "test"
  render :text => "Exception: #{$!}" # this could be any kind of custom render
end
Run Code Online (Sandbox Code Playgroud)

  • 如果Rails.env.test提高?是更清洁的IMO (3认同)