如何验证地图的值不为空

时间:2017-11-30 12:31:51

标签: spring-cloud-contract

假设我在groovy中指定了这样的合同:

org.springframework.cloud.contract.spec.Contract.make {
request {
    method "GET"
    url "/api/profiles"
    headers {
        header('Accept': 'application/json;charset=UTF-8')
        header('Content-Type': 'application/json;charset=UTF-8')
    }
}
response {
    status 200
    headers {
        header('Content-Type': 'application/json;charset=UTF-8')
    }
    body(
            value(
                    stub(
                            '''\
                    [
                      {
                        "profile": "profile1",
                        "myMap": {}
                      },
                      {
                        "profile": "profile2",
                        "myMap": {
                          "12345": "FOO",
                          "asdf": "BAR"
                        }
                      }
                    ]   
                    '''
                    ),
                    test(
                            [
                                    [
                                            "profile" : regex(nonEmpty()),
                                            "myMap": [
                                                         [
                                                            ??
                                                         ]
                                                      ]
                                    ]
                            ]
                    )
            )
    )
}

}

现在我想测试一下,map包含String to String条目,其值不能为空。地图本身可能是空的。

如何测试动态密钥名称?

1 个答案:

答案 0 :(得分:1)

在合同的响应方面,您必须选择是否使用地图表示法或字符串表示法。如果你想对响应的部分做断言,你必须将这些断言嵌入到体内或使用测试匹配器。

您可以将正文作为多行字符串放置,然后编写testMatchers部分

testMatchers{
    jsonPath('$.[*].myMap', byCommand('assertKeys($it)'))
}

那么它足以让您在assertKeys方法中提供断言。