使用 Specs2 虚假请求执行 POST
Do a POST with Specs2 Fake Request
我想使用 FakeRequest + Specs2 执行 POST 操作。
到目前为止,我已经能够编写用于发出获取请求的代码
class ItemsSpec extends PlaySpecification {
"Items controller" should {
"list items" in new WithApplication {
route(FakeRequest(controllers.routes.Items.list())) match {
case Some(response) => status(response) must equalTo (OK) contentAsJson(response) must equalTo (Json.arr())
case None => failure
}
}
}
}
我面临的一些困难是
在控制器上执行 post 时使用反向查找,而不是对操作和路径进行硬编码。
发送 json 正文作为请求的一部分
解析结果并检查返回对象的某些属性是否匹配。
我在谷歌上搜索了一下,发现了这个
https://www.playframework.com/documentation/2.4.x/ScalaTestingWithSpecs2
在最后一个例子中,它似乎在做一个POST。但是路径是硬编码的,我不明白什么是基本操作。
有没有一种简单的方法可以让我为需要 POST 的 Web 服务编写测试用例?
像这样的东西应该可以工作
val Some(result) = route(FakeRequest(POST, controllers.routes.MyClassName.myMethod().url)
.withJsonBody(Json.obj("key" -> 1234567)
)
然后查看结果正常。例如
status(result) must equalTo(OK)
编辑 - 要阅读正文,假设其 Json,请使用此
val js = contentAsJson(result)
val fieldXyz = (js \ "fieldXyz").as[String]
如果您只是将正文作为字符串读取,请使用此
val resultString = contentAsString(result)
我想使用 FakeRequest + Specs2 执行 POST 操作。
到目前为止,我已经能够编写用于发出获取请求的代码
class ItemsSpec extends PlaySpecification {
"Items controller" should {
"list items" in new WithApplication {
route(FakeRequest(controllers.routes.Items.list())) match {
case Some(response) => status(response) must equalTo (OK) contentAsJson(response) must equalTo (Json.arr())
case None => failure
}
}
}
}
我面临的一些困难是
在控制器上执行 post 时使用反向查找,而不是对操作和路径进行硬编码。
发送 json 正文作为请求的一部分
解析结果并检查返回对象的某些属性是否匹配。
我在谷歌上搜索了一下,发现了这个
https://www.playframework.com/documentation/2.4.x/ScalaTestingWithSpecs2
在最后一个例子中,它似乎在做一个POST。但是路径是硬编码的,我不明白什么是基本操作。
有没有一种简单的方法可以让我为需要 POST 的 Web 服务编写测试用例?
像这样的东西应该可以工作
val Some(result) = route(FakeRequest(POST, controllers.routes.MyClassName.myMethod().url)
.withJsonBody(Json.obj("key" -> 1234567)
)
然后查看结果正常。例如
status(result) must equalTo(OK)
编辑 - 要阅读正文,假设其 Json,请使用此
val js = contentAsJson(result)
val fieldXyz = (js \ "fieldXyz").as[String]
如果您只是将正文作为字符串读取,请使用此
val resultString = contentAsString(result)