如何在SprayTest中使用json主体模拟POST请求?

前端之家收集整理的这篇文章主要介绍了如何在SprayTest中使用json主体模拟POST请求?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我有一个端点解组json像这样:
(path("signup")& post) {
    entity(as[Credentials]) { credentials =>
    …

如何使用Spray测试规范测试:

"The Authentication service" should {

"create a new account if none exists" in {
   Post("/api/authentication/signup","""{"email":"foo","password":"foo:" }""") ~> authenticationRoute ~> check {
    handled === true
  }
}
}

由于几个原因,这显然不起作用.什么是正确的方法

解决方法

诀窍是设置正确的内容类型:
Post("/api/authentication/signup",HttpBody(MediaTypes.`application/json`,"password":"foo" }""")
)

但它变得更加简单.如果你有一个spray-json依赖项,那么你需要做的就是导入:

import spray.httpx.SprayJsonSupport._
import spray.json.DefaultJsonProtocol._

第一个导入包含(un)marshaller,它将你的字符串转换为json请求,你不需要用显式媒体类型将它包装到HttpEntity中.

第二个导入包含基本类型的所有Json读取器/写入器格式.现在你可以写:Post(“/ api / authentication / signup”,“”“{”email“:”foo“,”password“:”foo:“}”“”).但如果你有一些案例类,那就更酷了.对于前者您可以定义一个案例类Credentials,为此提供jsonFormat并在tests / project中使用它:

case class Creds(email: String,password: String)
object Creds extends DefaultJsonProtocol {
  implicit val credsJson = jsonFormat2(Creds.apply)
}

现在在测试中:

Post("/api/authentication/signup",Creds("foo","pass"))

喷涂自动将其编入Json请求作为application / json

猜你在找的JavaScript相关文章