2013-01-04 53 views
3

我在寫測試使用了Scalatra一些JSON RESTful API,因此片段看起來像以下預期是JSON通過JSON支持序列化的Scalatra的Scalatra的測試REST風格的JSON對象

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") 
    } 
    } 
} 

。我的問題是如何將主體轉換回scala中的同一個case類實例,並極大地簡化測試?

回答

2

可以直接使用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 ("[email protected]") 

你可以調用.valuesJValue S(json4s' JSON文檔的內部表示)獲得原始斯卡拉值(String S,Int S,等等)。

查看json4s introduction所有這些例子。