Scala Play 2.4:如何显式传递MessagesApi?

时间:2016-02-21 13:54:40

标签: scala playframework specs2

我创建了一个小型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)我也要嘲笑它吗?如何?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

对于单元测试,我会选择模拟。 specs2(docs)和ScalaTest(docs)都与Mockito有一定程度的集成。

对于功能测试,我会使用WithApplication范围(在specs2的情况下)并使用app injector创建控制器实例:

"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