我有一个内置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()适用于子项目?
答案 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()
}