gpt4 book ai didi

ruby-on-rails - 我如何测试 Rails rescue_from?

转载 作者:行者123 更新时间:2023-11-28 20:33:15 25 4
gpt4 key购买 nike

Rails 3 似乎忽略了我的 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'

我如何确保在测试中正确地“捕获”到它?

最佳答案

Rails 3 在中间件中处理 ActionController::RoutingError,因此 ApplicationController::rescue_from 看不到异常。 Rails 核心团队建议在 routes.rb ( GitHub issue ) 底部使用包罗万象的路由,直到他们决定修复。

一种选择是使用全捕获路由来处理路由错误,然后手动引发异常以命中 rescue_from ( code 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

关于ruby-on-rails - 我如何测试 Rails rescue_from?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7998637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com