Тестирование приложения Play2 с SecureSocial с использованием внедрения зависимостей
Большое спасибо за любые рекомендации!
Плагин SecureSocial прекрасно работает, когда я запускаю его из браузера, но я бы хотел сейчас протестировать остальную часть моего приложения Play.
Краткое введениеSecureSocial»Синтаксис выглядит так:
def page = SecuredAction(WithProvider("google")) { ... }
или это: я
def page = UserAwareAction { ... }
искалВот, который, кажется, единственный вопрос о переполнении стека, даже удаленно связанный с моей проблемой с SecureSocial, но я неНе очень интересная переустановка байт-кода. Там должно быть более простое решение для этого.
Когда я'Когда я запускаю тесты, которые обращаются к действиям, защищенным SecureSocial, я получаю большую ошибку, которая, по-моему, означаетЯ не передаю его пользователю. (см. нижнюю часть этого вопроса)
Что я хотел бы сделатьЛибо внедрить все функции, чтобы вернуть типAction
вместоSecuredAction
или жеUserAwareAction
только во время тестирования
Или фактически передать тестового пользователя на вызов.Но как?
Что у меня есть@Singleton
class JsonOps @Inject() () extends Controller with SecureSocial {...}
Global.scala
написано как описаноВот и в моем тесте ...
val controller = new JsonOps
val result = controller.userAwareActionRequestForSomeJson("")(FakeRequest())
У меня также есть такие звонки:
// This is what I would use for production
def extjs = SecuredAction(WithProvider("google")) { implicit request =>
Ok(views.html.extjs(request.user.firstName))
}
// This is what I would use for testing
def extjs = Action { implicit request =>
Ok(views.html.extjs("testtesttesting"))
}
Вот почему я думаю, что эта проблема может быть хорошо подходит для внедрения зависимости? Я'Я не уверен, как бы я сделал экземпляр класса, так как Global.scala I 'm using - это универсальный экземпляр класса. Я неОсобо хотелось бы написать 9000+ признаков для каждого контроллера, который у меня есть.
Большая ошибкаЭто строка UserOpsSpec.scala, строки 12 и 13:
12 val controller = new UserOps
13 val result = controller.extjs()(FakeRequest())
и это ошибка
[error] RuntimeException: java.lang.ExceptionInInitializerError (UserOpsSpec.scala:13)
[error] play.api.mvc.ActionBuilder$anon$1.apply(Action.scala:220)
[error] securesocial.core.SecureSocial$.authenticatorFromRequest(SecureSocial.scala:200)
[error] securesocial.core.SecureSocial$anonfun$SecuredAction$1.apply(SecureSocial.scala:81)
[error] securesocial.core.SecureSocial$anonfun$SecuredAction$1.apply(SecureSocial.scala:78)
[error] play.api.mvc.ActionBuilder$anon$1.apply(Action.scala:215)
[error] play.api.Play$anonfun$current$1.apply(Play.scala:51)
[error] play.api.Play$anonfun$current$1.apply(Play.scala:51)
[error] play.api.Play$.current(Play.scala:51)
[error] securesocial.core.Authenticator$.cookieName$lzycompute(Authenticator.scala:188)
[error] securesocial.core.Authenticator$.cookieName(Authenticator.scala:188)
[error] securesocial.core.Authenticator$.(Authenticator.scala:201)
[error] securesocial.core.Authenticator$.(Authenticator.scala)
[error] securesocial.core.SecureSocial$.authenticatorFromRequest(SecureSocial.scala:200)
[error] securesocial.core.SecureSocial$anonfun$SecuredAction$1.apply(SecureSocial.scala:81)
[error] securesocial.core.SecureSocial$anonfun$SecuredAction$1.apply(SecureSocial.scala:78)
[error] play.api.mvc.ActionBuilder$anon$1.apply(Action.scala:215)
[error] null
[error] securesocial.core.SecureSocial$.authenticatorFromRequest(SecureSocial.scala:200)
[error] securesocial.core.SecureSocial$anonfun$SecuredAction$1.apply(SecureSocial.scala:81)
[error] securesocial.core.SecureSocial$anonfun$SecuredAction$1.apply(SecureSocial.scala:78)
[error] play.api.mvc.ActionBuilder$anon$1.apply(Action.scala:215)
[error] There is no started application
[error] play.api.Play$anonfun$current$1.apply(Play.scala:51)
[error] play.api.Play$anonfun$current$1.apply(Play.scala:51)
[error] play.api.Play$.current(Play.scala:51)
[error] securesocial.core.Authenticator$.cookieName$lzycompute(Authenticator.scala:188)
[error] securesocial.core.Authenticator$.cookieName(Authenticator.scala:188)
[error] securesocial.core.Authenticator$.(Authenticator.scala:201)
[error] securesocial.core.Authenticator$.(Authenticator.scala)
[error] securesocial.core.SecureSocial$.authenticatorFromRequest(SecureSocial.scala:200)
[error] securesocial.core.SecureSocial$anonfun$SecuredAction$1.apply(SecureSocial.scala:81)
[error] securesocial.core.SecureSocial$anonfun$SecuredAction$1.apply(SecureSocial.scala:78)
[error] play.api.mvc.ActionBuilder$anon$1.apply(Action.scala:215)
[info]