如何使路线方法在Play 2.x子项目中有效?

时间:2015-02-25 15:28:09

标签: scala testing routing playframework-2.0

我有一个内置sub-project的Play 2.3项目。在tutorial之后,我正在使用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()方法始终返回None。使用route(FakeRequest(GET, "/bob/11"))也不起作用。

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

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

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

所以任何人都知道如何使route()适用于子项目?

1 个答案:

答案 0 :(得分:1)

尝试将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()
}