Это ожидаемое (возможно, несколько удивительное) поведение.
Если вы помните, как Rails разделяет проблемы, это имеет смысл.
Контроллеры не маршрутизируют, что происходит в диспетчере.
Попробуйте добавить это в свой тест:
raise controller.params.inspect
Failures:
1) PagesController GET pages/about
Failure/Error: raise controller.params.inspect
{"action"=>"about", "controller"=>"pages"}
get 'about'
не нуждается в маршрутизации - среда тестирования Rails позаботится об этом.Поскольку спецификация уже знает, какое действие она должна выполнить, она продолжает и вызывает PagesController#about
.
Недостающий фрагмент головоломки состоит в том, что Rails не нужно, чтобы действие определялось какпока существует шаблон ;он просто отобразит about.html.erb
.
Так что этот тест проходит успешно, как и должно быть.Когда вы называете это живым, это терпит неудачу, потому что нет никакого маршрута.Если бы вы написали спецификацию запроса, спецификацию маршрутизации или тест Cucumber, он также не прошел бы.