是的,有一種新的方法可以在Play框架2.6中使用ScalaTest進行此操作。您需要使用Guice
來構建Application
並注入您自己的RouterProvider
。考慮這個例子:
class MyServiceSpec
extends PlaySpec
with GuiceOneServerPerTest {
private implicit val httpPort = new play.api.http.Port(port)
override def newAppForTest(testData: TestData): Application =
GuiceApplicationBuilder()
.in(Mode.Test)
.overrides(bind[Router].toProvider[RouterProvider])
.build()
def withWsClient[T](block: WSClient => T): T =
WsTestClient.withClient { client =>
block(client)
}
"MyService" must {
"do stuff with an external service" in {
withWsClient { client =>
// Create an instance of your client class and pass the WS client
val result = Await.result(client.getRepositories, 10.seconds)
result mustEqual List("octocat/Hello-World")
}
}
}
}
class RouterProvider @Inject()(action: DefaultActionBuilder) extends Provider[Router] {
override def get: Router = Router.from {
case GET(p"/repositories") => action {
Results.Ok(Json.arr(Json.obj("full_name" -> "octocat/Hello-World")))
}
}
}