Воспроизвести 2 обратных маршрута, получить маршрут из метода контроллера

#scala #playframework #playframework-2.0

#scala #playframework #playframework-2.0

Вопрос:

Используя платформу Play 2.2.3, учитывая, что у меня есть маршрут, подобный этому, в моем файле маршрутов :

 GET         /event                                 controllers.Event.events
  

Как я могу программно получить «/ event», зная метод, который я пытаюсь достичь, в данном случае контроллеры.Аутентификация.аутентификация ‘?

Мне это нужно для целей тестирования, потому что я хотел бы, чтобы лучший тест ожидал не самого маршрута, а действительно вызываемого метода controllers. Так что, возможно, есть другое решение, чем получение маршрута и тестирование его таким образом, как я делаю сейчас :

 //Login with good password and login
    val Some(loginResult) = route(FakeRequest(POST, "/login").withFormUrlEncodedBody(
      ("email", email)
      , ("password", password)))
    status(loginResult)(10.seconds)     mustBe 303
    redirectLocation(loginResult).get mustBe "/event"
  

Ответ №1:

Обратный маршрут строится таким образом:

 [full package name].routes.[controller].[method]
  

В вашем примере:

  controllers.routes.Authentication.authenticate
 controllers.routes.Events.events
  

Но, скажем, вы разбили свои пакеты, как controllers.auth и controllers.content , тогда они были бы:

  controllers.auth.routes.Authentication.authenticate
 controllers.content.routes.Events.events
  

Обратные маршруты возвращают a Call , который содержит метод HTTP и URI. В ваших тестах вы можете построить a FakeRequest с помощью Call :

  FakeRequest(controllers.routes.Authentication.authenticate)
  

И вы также можете использовать его для проверки URI перенаправления:

  val call: Call = controllers.routes.Events.events 
 redirectLocation(loginResult) must beSome(call.url)
  

Комментарии:

1.Как это работает, если я использую SIRD маршрутизатор? В моем случае routes.conf имеет -> /ws/users WSRouters.UserRouter . UserRouter UserController передается в качестве аргумента, и я вызываю UserController' verifyUser метод. Как мне изменить этот маршрут/