如果我有一个像这样解组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
}
}
}
显然,由于以下几个原因,这行不通。正确的方法是什么?
诀窍是设置正确的Content-Type:
Post("/api/authentication/signup",
HttpBody(MediaTypes.`application/json`,
"""{"email":"foo", "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:" }""")
。但是,如果您有一些案例类,它甚至会更酷。对于前。您可以定义一个case class Credentials
,jsonFormat
为此提供并在测试/项目中使用它:
case class Creds(email: String, password: String)
object Creds extends DefaultJsonProtocol {
implicit val credsJson = jsonFormat2(Creds.apply)
}
现在正在测试中:
Post("/api/authentication/signup", Creds("foo", "pass"))
Spray会自动将其编组到Json请求中 application/json
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句