4

我正在使用游戏!框架并尝试在 Specs2 测试中使用 JSON 响应消息但没有成功。

我想要做的是在 JsValue 中断言键-> 值对,如下例所示......但我无法让匹配器正确通过。

import org.specs2.mutable._
import play.api.libs.json.{Json, JsValue}

class JsonSpec extends Specification {

  "Json Matcher" should {

    "Correctly match Name->Value pairs" in {
      val resultJson:JsValue = Json.parse("""{"name":"Yardies"}""")
      resultJson must  /("name" -> "Yardies")
    }

    "Correctly match Name->Value pairs with numbers as doubles" in {
      val resultJson:JsValue = Json.parse("""{"id":1}""")
      resultJson must  /("id" -> 1.0)
    }
  }
}

我得到的错误是

{name : Yardies} doesn't contain '(name,Yardies)'

{id : 1.0} doesn't contain '(id,1.0)'

不是很有帮助,我想这是我缺少的一些简单的东西(Scala和Play都是新的)

史蒂夫

4

1 回答 1

5

JsonMatchersspecs2 中应该稍微收紧一点。它们是Matcher[Any]Any应该有一个toString可以被 Scala 的 json 解析器(而不是 Play 的解析器)解析的方法。

以下规范按预期工作:

class JsonSpec extends Specification {

  "Json Matcher" should {

    "Correctly match Name->Value pairs" in {
      val resultJson = """{"name":"Yardies"}"""
      resultJson must  /("name" -> "Yardies")
    }

    "Correctly match Name->Value pairs with numbers as doubles" in {
      val resultJson = """{"id":1}"""
      resultJson must  /("id" -> 1.0)
    }
  }
}

在您的情况下,我怀疑解析toStringPlay 的 Json 值的表示会返回与匹配器所期望的略有不同的东西。这将在下一个 specs2 版本中修复。

于 2013-03-29T00:48:26.050 回答