我想使用FakeRequest + Specs2执行POST操作。
到目前为止,我已经能够编写用于发出get请求的代码
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
}
}
}
}
我面临的一些困难是
在控制器上发帖时使用反向查找,而不是硬编码操作和路径。
发送json正文作为请求的一部分
解析结果并检查返回对象的某些属性是否匹配。
我做了一些谷歌搜索,发现了这个
https://www.playframework.com/documentation/2.4.x/ScalaTestingWithSpecs2
在最后一个例子中,它似乎正在进行POST。但路径是硬编码的,我不明白什么是必要的行动。
有一种简单的方法可以为我的Web服务编写一个需要POST的测试用例吗?
答案 0 :(得分:4)
这样的事情应该有效
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)