如何使用功能测试在 Play Framework 中测试控制器
How to test a controller in Play Framework with a functional test
我正在尝试使用游戏框架版本 2.5.9 对控制器进行功能测试。
我有一个名为 HomeController 的控制器
@Singleton
class HomeController @Inject()(implicit exec: ExecutionContext) extends Controller {
def index = Action.async {
Future{
Ok(views.html.index("Home"))
}
}
}
我的观点是这样的
@(message: String)
@main("Home") {
<h2>Welcome</h2>
}
@main 中的参数是页面标题中的内容
我的测试看起来像这样
class ApplicationTwoSpec extends PlaySpec with OneServerPerSuite with OneBrowserPerSuite with HtmlUnitFactory{
implicit val ec = Implicits.global
val homeController = new HomeController()
implicit override lazy val app =
new GuiceApplicationBuilder()
.router(Router.from{
case GET(p"/") => homeController.index
})
.build()
"The sample Controler with a server" must {
"have home in the title" in {
go to s"http://localhost:9000/"
pageTitle mustBe "Home"
}
}
}
当我 运行 测试回来时
must return and ok response back *** FAILED ***
"[]" was not equal to "[Home]" (ApplicationTwoSpec.scala:37)
我需要做什么才能让它得到正确的响应?
看了scala test plus和playframework的源码后发现了问题
go to s"http://localhost:9000/"
应该是
go to s"http://localhost:$port/"
implicit lazy val port
在 OneServerPerSuite
trait 中指定,并从默认端口 19001 的 play.api.test.Helpers 包中获取其默认值。如果我真的需要端口为 9000,我可以还可以使用
覆盖端口
implicit override lazy val port = 9000
我正在尝试使用游戏框架版本 2.5.9 对控制器进行功能测试。
我有一个名为 HomeController 的控制器
@Singleton
class HomeController @Inject()(implicit exec: ExecutionContext) extends Controller {
def index = Action.async {
Future{
Ok(views.html.index("Home"))
}
}
}
我的观点是这样的
@(message: String)
@main("Home") {
<h2>Welcome</h2>
}
@main 中的参数是页面标题中的内容 我的测试看起来像这样
class ApplicationTwoSpec extends PlaySpec with OneServerPerSuite with OneBrowserPerSuite with HtmlUnitFactory{
implicit val ec = Implicits.global
val homeController = new HomeController()
implicit override lazy val app =
new GuiceApplicationBuilder()
.router(Router.from{
case GET(p"/") => homeController.index
})
.build()
"The sample Controler with a server" must {
"have home in the title" in {
go to s"http://localhost:9000/"
pageTitle mustBe "Home"
}
}
}
当我 运行 测试回来时
must return and ok response back *** FAILED ***
"[]" was not equal to "[Home]" (ApplicationTwoSpec.scala:37)
我需要做什么才能让它得到正确的响应?
看了scala test plus和playframework的源码后发现了问题
go to s"http://localhost:9000/"
应该是
go to s"http://localhost:$port/"
implicit lazy val port
在 OneServerPerSuite
trait 中指定,并从默认端口 19001 的 play.api.test.Helpers 包中获取其默认值。如果我真的需要端口为 9000,我可以还可以使用
implicit override lazy val port = 9000