Я бы сказал, либо в порядке, и я лично предпочитаю первый.
Интеграционный тест должен имитировать человеческие глаза и действия. Человек мог видеть «/ about/terms», но не «about_term_path».
Кроме того, два предложения:
Лучше использовать Capybara, которые позволяют веб-драйвер с JavaScript. Таким образом, «get» не будет работать, вместо этого используйте «visit»
Не нужно проверять ответ в тесте интеграции, который является заданием функционального теста (контроллера). Идите прямо к реальной точке.
Добавить
Чтобы ответить на вопрос Джейсона. Да, я всегда использую жестко закодированные маршруты в тестах интеграции, довольно последовательно.
Причина в том, что внешний подход, что является ключевым моментом приемочных испытаний, управляемых разработкой. Когда я пишу интеграционный тест, я не знаю названных маршрутов, потому что route.rb еще не был изменен. Или я должен знать, но в этот момент мне все равно.
Когда rspec сказал мне «нет соответствующего маршрута», я говорю, хорошо, позвольте мне сгенерировать контроллер и проверить маршруты.rb.
Я согласен с тем, что именованные маршруты - это путь, но, возможно, по другой причине. Я бы сказал, что ваш код приложения должен соответствовать языку вашего тестового кода. Поскольку Rails хочет, чтобы вы использовали именованные маршруты в своем приложении, мне кажется, что было бы логично использовать именованные маршруты в ваших тестах. –