Как использовать polymorphic_path в функциональном тесте в Rails 3

Я пытаюсь использовать polymorphic_path в функциональном тесте в Rails 3.

Сначала я бы получил

NoMethodError: undefined method `polymorphic_path' for #<ArticlesControllerTest:0x492f17c>

А потом я добавил

include Rails.application.routes.url_helpers

undefined method error остановился, но теперь обычные пути, такие как article_path(article), например, перестали работать:

NameError: undefined local variable or method `default_url_options' for #<ArticlesControllerTest:0x33ccbe0>
.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.0.9/lib/action_dispatch/testing/assertions/routing.rb:175:in `method_missing'
.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.0.9/lib/action_dispatch/routing/url_for.rb:102:in `url_options'
.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.0.9/lib/action_dispatch/routing/url_for.rb:131:in `url_for'
.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.0.9/lib/action_dispatch/routing/route_set.rb:195:in `article_path'

Раньше я мог нормально использовать polymorphic_path в Rails 2, включив

include ActionController::UrlWriter

Как я могу заставить это работать в Rails 3?


person deb    schedule 09.08.2011    source источник


Ответы (3)


Мне нужно включить:

include ActionDispatch::Routing::UrlFor
include Rails.application.routes.url_helpers

и установите:

default_url_options[:host] = 'www.example.com'

Я узнал из этого поста, который отвечает на аналогичную проблему http://steve.dynedge.co.uk/2010/04/29/rails-3-rake-and-url_for/

person deb    schedule 11.08.2011

Я столкнулся с этой проблемой при рефакторинге некоторых тестов Rails4, чтобы сделать их независимыми от модели. я нашел это

something_path(obj)

работал, но

polymorphic_path(obj)

не Ни одно из приведенных выше предложений не сработало для меня. Однако я обнаружил, что это произошло:

@controller.polymorphic_path(obj)

Это в контексте, где self является потомком ActionController::TestCase.

Другой способ обойти это — определить метод делегирования в тестовом классе контроллера:

def polymorphic_path(*args) 
  @controller.polymorphic_path(*args)
end
person starfry    schedule 06.05.2016

Ты пытался:

Rails.application.routes.url_helpers.polymorphic_path

? :)

person socjopata    schedule 10.08.2011
comment
Вроде должно работать, но я пробовал, не помогло. Я буду продолжать искать, и я вернусь, чтобы обновить - person deb; 11.08.2011