如何使路由方法在 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()
}
我有一个带有 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()
}