如何使路由方法在 Play 2.x 子项目中起作用?

How to make route method works in Play 2.x sub-project?

我有一个带有 sub-project inside. Following this tutorial 的 Play 2.3 项目,我正在使用 route 方法为子项目的控制器编写测试:

"Get Action" in new WithApplication {
  val Some(result) = route(FakeRequest(GET, "/sub/bob/11"))

  status(result) mustEqual OK
}

假设在routes.conf,子项目路由配置如下:

->  /sub    sub.Routes

并且在 sub.Routes 中,它包含:

GET  /bob/:id    controllers.sub.BobController.get(id: Int)

但是 route() 方法总是 returns None。使用 route(FakeRequest(GET, "/bob/11")) 也不行。

目前我只能通过直接调用Controller的方法来解决问题:

val result = BobController.get(11)(FakeRequest(GET, "/bob/11"))

在这种情况下,“/bob/11”中的“11”参数变得无用,因为它未被使用。

所以有人知道如何让 route() 为子项目工作吗?

尝试将 FakeApplication 的 application.router 设置为子模块的路由文件。

例如:

class SubModuleRouteSpec extends PlaySpecification with After {
  lazy val app = FakeApplication(additionalConfiguration = Map("application.router" -> "sub.Routes"))

  "SubModule route" should {

    "Get Action" in new WithApplication(app) {
      val result = route(FakeRequest(GET, "/bob/11")).get
      println(contentAsString(result))
      result must not beNull
    }
  }

  override def after: Any = Play.stop()
}