【发布时间】:2017-07-11 03:54:06
【问题描述】:
我有一个现有的 Scala 播放应用程序,它有一个调用另一个外部 REST API 的 REST API。我想模拟为内部测试返回虚假 JSON 数据的外部 Web 服务。基于以下示例:https://www.playframework.com/documentation/2.6.x/ScalaTestingWebServiceClients
我完全按照文档中的示例进行操作,但由于类 Action 已弃用而出现编译器错误。
import play.core.server.Server
import play.api.routing.sird._
import play.api.mvc._
import play.api.libs.json._
import play.api.test._
import scala.concurrent.Await
import scala.concurrent.duration._
import org.specs2.mutable.Specification
import product.services.market.common.GitHubClient
class GitHubClientSpec extends Specification {
import scala.concurrent.ExecutionContext.Implicits.global
"GitHubClient" should {
"get all repositories" in {
Server.withRouter() {
case GET(p"/repositories") => Action {
Results.Ok(Json.arr(Json.obj("full_name" -> "octocat/Hello-World")))
}
} { implicit port =>
WsTestClient.withClient { client =>
val result = Await.result(
new GitHubClient(client, "").repositories(), 10.seconds)
result must_== Seq("octocat/Hello-World")
}
}
}
}
}
mvc 包中的对象 Action 已弃用:注入 ActionBuilder (例如 DefaultActionBuilder)或扩展 BaseController/AbstractController/InjectedController
这是最新官方文档中的主要示例,实际上包含编译时错误,鉴于此示例不起作用,如何使用 Scala Play 轻松模拟外部 API 的正确方法是什么?
【问题讨论】:
标签: scala rest unit-testing playframework mocking