Scalatest matchers for Json with appropriate equality and descriptive error messages.
Add the dependency you want
libraryDependencies += "com.stephenn" %% "scalatest-json-jsonassert" % "0.2.0" libraryDependencies += "com.stephenn" %% "scalatest-json4s" % "0.2.0" libraryDependencies += "com.stephenn" %% "scalatest-play-json" % "0.2.0" libraryDependencies += "com.stephenn" %% "scalatest-circe" % "0.2.0" libraryDependencies += "com.stephenn" %% "scalatest-argonaut" % "0.2.0" libraryDependencies += "com.stephenn" %% "scalatest-jsoniter-scala" % "0.2.0"
You can also check the latest version on maven central.
Your scalatest spec should extend or import JsonMatchers
class ExampleSpec extends FunSpec with Matchers with JsonMatchers { describe("JsonMatchers usage") { it("should pass matching json with different spacing and order") { val input = """ |{ | "some": "valid json", | "plus": ["json", "content"] |} """.stripMargin val expected = """ |{ | "plus": ["json", "content"], | "some": "valid json" |} """.stripMargin input should matchJson(expected) } it("should fail on slightly different json explaining why") { val input = """ |{ | "someField": "valid json" |} """.stripMargin val expected = """ |{ | "someField": "different json" |} """.stripMargin input should matchJson(expected) // // Fails // // Json did not match { // "someField": "valid json" // } did not match { // "someField": "different json" // } // // Json Diff: // someField // Expected: different json // got: valid json } } }
For Jsoniter Scala the data structures and corresponding codec shall be defined, eg.:
import com.github.plokhotnyuk.jsoniter_scala.core.JsonValueCodec import com.github.plokhotnyuk.jsoniter_scala.macros.JsonCodecMaker case class Data(some: String, plus: Seq[String]) implicit val codec: JsonValueCodec[Data] = JsonCodecMaker.make
Please find a complete example here.
For the circe module you write a golden test that encodes and decodes a model, checking that it matches a golden example json.
it("can compare json and a model") { case class Foo(sameField: String) implicit val encoder = Encoder.forProduct1("someField")(Foo.unapply) implicit val decoder = Decoder.forProduct1("someField")(Foo.apply) val json = """ |{ | "someField": "valid json" |} """.stripMargin val model = Foo("valid json") model should matchJsonGolden(json) }
Done from github actions using sbt-ci-release
eg
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4