user14028818
user14028818

Reputation:

Serializing/Deserializing model using spray json scala test

I am new to scala and writing test cases using scala test and spray json. My code is as follows.

case class MyModel(Point1: String,
                          Point2: String,
                          Point3: Seq[String],
                          Point4: Seq[String])

  it should "serialise/deserialize a MyModel to JSON" in {
    val json= """{"Point1":"","Point3":[],"Point2":"","Point4":[]}""".parseJson
    val myModelViaJson= json.convertTo[MyModel]

    myModelViaJson.Point1 shouldBe ""
    myModelViaJson.Point3.isEmpty shouldBe true
    myModelViaJson.Point2 shouldBe ""
    myModelViaJson.Point4.isEmpty shouldBe true
  }

On doing sbt test I am geting following error

 should serialise/deserialize a MyModel to JSON *** FAILED ***
[info]   spray.json.DeserializationException: Expected String as JsString, but got []
[info]   at spray.json.package$.deserializationError(package.scala:23)
[info]   at spray.json.ProductFormats.fromField(ProductFormats.scala:63)
[info]   at spray.json.ProductFormats.fromField$(ProductFormats.scala:51)

How to solve this?

Upvotes: 1

Views: 113

Answers (1)

Ashish Ranjan
Ashish Ranjan

Reputation: 310

Add val myModelViaJson= json.convertTo[MyModel] before parsing.

Refer: jsonformats-for-case-classes

So, the code will look like

val json= """{"Point1":"","Point3":[],"Point2":"","Point4":[]}""".parseJson
implicit val format = jsonFormat4(MyModel)
val myModelViaJson= json.convertTo[MyModel]

myModelViaJson.Point1 shouldBe ""
myModelViaJson.Point3.isEmpty shouldBe true
myModelViaJson.Point2 shouldBe ""
myModelViaJson.Point4.isEmpty shouldBe true

Upvotes: 1

Related Questions