Один подходящий маршрут переопределяет другой, но не должен - PullRequest
2 голосов
/ 30 марта 2012

В rout.rb у меня есть:

[some routes]

match '/me' => "scores#all_athlete_scores", :constraints => LoggedInChecker
devise_scope :user do
  match '/me' => "devise/sessions#new"
end

match '/scores/athlete/:id', :to =>"scores#all_athlete_scores", :as => "all_athlete_scores"

[some more routes]

LoggedInChecker возвращает true, если пользователь вошел в систему, и false, если это не так.Если false, второй маршрут забирает его и отправляет пользователя на страницу входа.

В Scores_controller_test.rb у меня есть:

def test_get_all_athlete_scores
   [set up]
   get :all_athlete_scores, :id => @user
end

Странная часть заключается в том, что request.filtered_parameters [: full_path] в scores_controller_test - это /me?id=@user.id, а не /scores/athlete/:id'.

Если я изменю route.rb на:

[some routes]

match '/scores/athlete/:id', :to =>"scores#all_athlete_scores", :as => "all_athlete_scores"

match '/me' => "scores#all_athlete_scores", :constraints => LoggedInChecker
devise_scope :user do
  match '/me' => "devise/sessions#new"
end

[some more routes]

Тест работает нормально и request.filtered_parameters [: full_path] = /scores/athlete/:id.

Полностью сбитый с толку этим - / me не должен совпадать, когда GET сделан для all_athlete_scores.

Есть идеи?

1 Ответ

2 голосов
/ 30 марта 2012

Карим,

Я думаю, что путаница заключается в том, что у вас есть метод, а также именованный маршрут 'all_athlete_scores'.

get :all_athlete_scores, :id => @user

вызывает метод all_athlete_scores, а не именованный маршрут, чего вы и ожидали.

Вероятно, следует просто проверить функциональность этого метода в этом тесте и оставить тестирование маршрутов для другого теста.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...