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

in specs2はJsonMatchers少し締める必要があります。それらはMatcher[Any]であり、 にはScala の json パーサー (Play のパーサーではなく) で解析できるメソッドAnyがあるはずです。toString

次の仕様は期待どおりに機能します。

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

あなたの場合toString、Play の Json 値の表現を解析すると、マッチャーが期待するものとは少し異なるものが返されるのではないかと思います。これは、次の specs2 リリースで修正される予定です。

于 2013-03-29T00:48:26.050 に答える