2011-11-03 34 views
1

Rails 3似乎忽略了我的rescue_from处理程序,所以我无法在下面测试我的重定向。如何测试Rails rescue_from?

class ApplicationController < ActionController::Base 

    rescue_from ActionController::RoutingError, :with => :rescue_404 

    def rescue_404 
    flash[:notice] = "Error 404. The url <i>'#{env["vidibus-routing_error.request_uri"]}'</i> does not exist on this website." 
    redirect_to root_path 
    end 
end 

在功能和集成测试,这rescue_from被忽略,并引发错误:

ActionController::RoutingError: No route matches "/non_existent_url" 
    test/integration/custom_404_test.rb:5:in `test_404' 

我怎样才能确保在测试,这是正确的“抓”?

回答

2

Rails 3在中间件中处理ActionController::RoutingError,所以ApplicationController::rescue_from没有看到异常。 Rails核心团队建议在routes.rbGitHub issue)的底部使用全线路由,直到他们决定修复为止。

一种选择是使用一个包罗万象的途径来处理路由错误,然后手动引发异常击中rescue_fromcode from my blog post about this issue):

# routes.rb 
match "*path", :to => "application#routing_error" 

# application_controller.rb 
rescue_from ActionController::RoutingError, :with => :render_not_found 

def routing_error 
    raise ActionController::RoutingError.new(params[:path]) 
end 

def render_not_found 
    render :template => "misc/404" 
end 
相关问题