Scalatra测试restful JSON对象

我正在使用
Scalatra为一些
JSON restful API编写测试,一个片段如下所示

class MyScalatraServletTests extends ScalatraSuite with FunSuite {

test("An valid request should return 200") {
    get ("/rest/json/accc/B1Q4K3/1") {
      status should equal (200)
      body should include ("TEST")
    }
  }
}

预期的主体是Scalatra通过其JSON支持序列化的JSON.我的问题是如何将主体转换回scala中的相同case类实例,并大大简化测试?

最佳答案 json4s可以直接用于从JSON值中提取案例类.

import org.json4s._
import org.json4s.jackson.JsonMethods._
val parsedBody = parse(body)
parsedBody.extract[MyCaseClass]

您还可以使用类似XPath的表达式查询JSON.

val parsedBody = parse(body)
val email = (parsedBody \ "user" \ "email").values
email should be ("example@example.org")

您可以调用.values从JValues获取原始Scala值(字符串,Ints等)(json4s的JSON文档的内部表示).

有关所有这些的示例,请参见json4s introduction.

点赞