Specs2 JsonMatchers匹配'空数组'

时间:2013-10-02 21:49:33

标签: json scala specs2

我有以下json字符串:

{"guid": "4bad1d9a-180f-4751-a698-4aac07b1eac7","partition":1,"roles": []}

我已经能够使用specs2的org.specs2.matcher.JsonMatchers来强制执行guid和分区,例如:

json must /("guid" -> "4bad1d9a-180f-4751-a698-4aac07b1eac7")
json must /("partition" -> 1)

但我无法弄清楚正确的语法来强制'角色'存在且'是一个空数组'。这可以吗?

修改

根据评论者的提问,我尝试了以下内容:

json must /("roles" -> "[]")

导致以下测试失败:

[error]    {guid : 5ad4c4c5-4fdb-461b-9883-b84ff3b84610,partition : 1.0,roles : []} doesn't contain 'roles' : '[]'

2 个答案:

答案 0 :(得分:3)

要为roles测试的值为scala.util.parsing.json.JSONArray类型,因此您可以写:

json must /("roles" -> JSONArray(Nil))

如果出现这种情况可能会定义一个值:

val empty = JSONArray(Nil)
json must /("roles" -> empty)

答案 1 :(得分:3)

对于那些想要回答这个问题的人来说,Eric提供的答案已不再有效。

似乎匹配空数组的当前方式(specs2 3.8)将是:

json must /("roles").andHave(exactly[String]())

这不是最好的方法,但它是我发现的唯一可行的方法,并在回读时使某些有意义。

andHaverolesexactly的内容匹配,没有参数与空数组匹配。使用String类型参数是因为否则编译器会抱怨它无法推断出类型。