#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
метод. Как мне изменить этот маршрут/