【问题标题】:Scala Play 2.4: How to pass MessagesApi explicitly?Scala Play 2.4:如何显式传递 MessagesApi?
【发布时间】:2016-02-23 10:05:53
【问题描述】:

我创建了一个小型 CRUD 应用程序来了解有关 Scala 和 Play 的更多信息。按照 CRUD 模板,我获得了发布在 here on GitHub 的解决方案。 我一直在努力使用 Specs2 开发有效的测试。现在我想测试控制器。它有这个签名:

class PersonController @Inject() (repo: PersonRepository, val messagesApi: MessagesApi)
                         (implicit ec: ExecutionContext) extends Controller with I18nSupport

为了测试控制器的动作,我应该创建一个新的控制器。虽然我看到了如何模拟存储库并且 WithApplication 特征将提供 ExecutionContext,但我不知道如何处理 MessagesApi。

1) 我应该创建它的一个实例还是从某个地方检索它并显式传递?怎么样?

2) 我也要嘲笑它吗?怎么样?

感谢您的帮助。

【问题讨论】:

  • 单元测试还是功能测试?
  • 嗨@mar​​cospereira。最终,我希望能够两者兼得。

标签: scala playframework specs2


【解决方案1】:

对于单元测试,我会使用模拟。 specs2 (docs) 和 ScalaTest (docs) 都与 Mockito 进行了某种程度的集成。

对于功能测试,我会使用 WithApplication 范围(在 specs2 的情况下)并使用应用程序注入器来创建控制器实例:

"should test using an injected controller" in new WithApplication {
  val applicationController = app.injector.instanceOf[controllers.Application]
  val result: Future[mvc.Result] = applicationController.index()(FakeRequest())

  status(result) must equalTo(OK)
}

这样,Play 注入器将创建具有所有必要依赖项的控制器实例,包括 MessageApi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    相关资源
    最近更新 更多