Я работаю над функциональным тестом, который должен утверждать, что определенный тег XHTML присутствует в определенном наборе контроллеров.Я в основном делаю это:
class ApplicationControllerTest < ActionController::TestCase
def setup
@controller = ApplicationController.new
end
# [...]
def test_foo_bar_and_baz_include_stylesheet
[FooController, BarController, BazController].each do |controller|
@controller = controller.new
get :show
assert_select 'head > link[rel="stylesheet"]'
end
end
end
Проблема в том, что не все контроллеры имеют действие :show
.Что мне нужно сделать, это спросить либо контроллер или конфигурацию маршрутизации для действия контроллера по умолчанию и вызвать get
с этим.
Обновление: Джозеф Сильваши былправильно: я закончил тем, что разделил свой контроллер get
на отдельные контрольные примеры.Решение проблемы маршрута «по умолчанию» было достаточно плохим, пока я не обнаружил, что к некоторым из моих маршрутов были присоединены условия, и мне пришлось бы их анализировать, чтобы создать правильный вызов get
.И, наконец, функциональные тесты Rails не очень хорошо справляются с многократным вызовом get
в одном и том же тестовом примере, особенно когда эти вызовы затрагивают несколько контроллеров.: (
Я думаю, что урок, который мы все знаем наизусть, но иногда трудно принять: если код выглядит неопрятным, вы, вероятно, делаете это неправильно.;)