2013-03-25 3 views

ответ

4

about_terms_path является правильным, поскольку пользовательский путь маршрут может измениться в файле маршрутов, но название маршрута должен остаться тем же самым.

Первый приведет к хрупким испытаниям.

Если имя маршрута изменилось, все ссылки на этот маршрут в приложении Rails потребуют изменения, и ваши тесты rspec также будут изменены.

Если маршрут маршрута изменился, ничто в ваших приложениях Rails или rspec не потребовалось бы изменить.

EDIT:

Если вы хотите проверить маршруты, проверить это https://www.relishapp.com/rspec/rspec-rails/docs/routing-specs

+0

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

2

Я бы сказал, либо в порядке, и я лично предпочитаю первый.

Интеграционный тест должен имитировать человеческие глаза и действия. Человек мог видеть «/ about/terms», но не «about_term_path».

Кроме того, два предложения:

  1. Лучше использовать Capybara, которые позволяют веб-драйвер с JavaScript. Таким образом, «get» не будет работать, вместо этого используйте «visit»

  2. Не нужно проверять ответ в тесте интеграции, который является заданием функционального теста (контроллера). Идите прямо к реальной точке.

Добавить

Чтобы ответить на вопрос Джейсона. Да, я всегда использую жестко закодированные маршруты в тестах интеграции, довольно последовательно.

Причина в том, что внешний подход, что является ключевым моментом приемочных испытаний, управляемых разработкой. Когда я пишу интеграционный тест, я не знаю названных маршрутов, потому что route.rb еще не был изменен. Или я должен знать, но в этот момент мне все равно.

Когда rspec сказал мне «нет соответствующего маршрута», я говорю, хорошо, позвольте мне сгенерировать контроллер и проверить маршруты.rb.

+1

Я думаю, что это хорошая идея, чтобы быть последовательным между вашим кодом приложения и тестовым кодом, поэтому я бы сказал, что либо использую именованные маршруты в обоих, либо в не названных маршрутах в обоих. Поскольку Rails, похоже, хочет, чтобы вы использовали именованные маршруты по жестко закодированным путям, я бы сказал, что использовать именованные маршруты в обоих местах. –

+0

@JasonSwett, спасибо за ваш вопрос :) Я добавил свое мнение в ответ. –

+0

Интересные точки. Теперь я гораздо менее уверен, что моя позиция правильная. –

Смежные вопросы