Как я могу протестировать Rails rescue_from? - PullRequest
1 голос
/ 03 ноября 2011

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'

Как убедиться, что это правильно «поймано» в тесте

1 Ответ

2 голосов
/ 28 апреля 2012

Rails 3 обрабатывает ActionController::RoutingError в промежуточном программном обеспечении, поэтому ApplicationController::rescue_from не видит исключения.Основная группа Rails рекомендует использовать универсальный маршрут внизу routes.rb ( проблема GitHub ), пока не определится с исправлением.

Один из вариантов - использовать универсальный метод.route для обработки ошибок маршрутизации, а затем вручную создайте исключение, чтобы нажать rescue_from ( код из моего сообщения в блоге об этой проблеме ):

# 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
...