Не то, чтобы я знал ... хотя вы могли бы сделать его немного короче, упаковав все методы и действия в хеш:
should "be redirected" do
{
:get => :new,
:post => :create,
}.each do |method, action|
send(method, action)
assert_redirected_to(root_path)
end
end
Редактировать: так что да, это, вероятно, излишне, но вот другой способ:
should "be redirected" do
ActionController::Routing::Routes.named_routes.routes.each do |name, route|
if route.requirements[:controller] == @controller.controller_name
send(route.conditions[:method], route.requirements[:action])
assert_redirected_to(root_path)
end
end
end
Кажется, однако, что если вы определяете несколько: методы в пользовательских маршрутах, он все еще только «находит» первый, например,
map.resources :foo, :collection => {
:bar => [:get, :post]
}
Приведенный выше маршрут будет выполняться только с глаголом GET.
Также, если в URL есть другие требования, такие как наличие идентификатора записи, мой наивный пример игнорирует это требование. Я оставляю это на ваше усмотрение:)