Как протестировать приложение Play с помощью Guice и насмешливых пользовательских ControllerComponents - PullRequest
0 голосов
/ 12 июня 2019

Я начал создавать новую игру Scala Play! приложение, и мне интересно, как проверить контроллер, который определяется следующим образом:

class CustomController @Inject()(
    cc: SecuredControllerComponents,
    clientResourceHandler: CustomResourceHandler
)(implicit ec: ExecutionContext)
    extends SecuredController(cc)

Мне нужно издеваться над SecuredControllerComponents, которые вводятся Guice автоматически.

case class SecuredControllerComponents @Inject()(
    adminActionBuilder: AdminActionBuilder,
    authenticatedActionBuilder: AuthenticatedActionBuilder,
    actionBuilder: DefaultActionBuilder,
    parsers: PlayBodyParsers,
    messagesApi: MessagesApi,
    langs: Langs,
    fileMimeTypes: FileMimeTypes,
    executionContext: scala.concurrent.ExecutionContext
) extends ControllerComponents

class SecuredController @Inject()(scc: SecuredControllerComponents)
    extends AbstractController(scc) {
  def AdminAction: AdminActionBuilder                       = scc.adminActionBuilder
  def AuthenticatedAction: AuthenticatedActionBuilder       = scc.authenticatedActionBuilder
}

В официальной документации Play предлагается использовать Helpers.stubControllerComponents() для передачи компонентов в контроллер, который необходимо протестировать.

Редактировать - тест, который я хотел бы выполнить

    "return a list of Custom Objects as a JSON array" in {
      val controller =
        new CustomController(Helpers.stubControllerComponents(), resourceHandler)
      val result: Future[Result] = controller.index().apply(FakeRequest())
      .....
      val bodyText: String       = contentAsString(result)
      bodyText mustBe "ok"

Я прочитал это руководство о тестировании с Google Guice, но я не знаю, как справиться с моими пользовательскими SecuredComponents и CustomResourceHandler.

Не могли бы вы указать мне правильное направление? Есть ли хороший пример, чтобы посмотреть?

Моя текущая конфигурация

  • Scala v2.12.8
  • Play 2.7.2
  • Scala Guice 4.2.1
  • scalatestplus-play 4.0.2

1 Ответ

0 голосов
/ 14 июня 2019

Я думаю, что все, что вам нужно сделать, это теперь высмеивать ваши классы, например, с помощью Mockito :

  new CustomController(mySecuredControllerComponentsMock, myCustomResourceHandlerMock)


 ...

 lazy val mySecuredControllerComponentsMock = {
  mock(SecuredControllerComponents.class)
  ...
}
...