0

假设我在 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": [
                                                         [
                                                            ??
                                                         ]
                                                      ]
                                    ]
                            ]
                    )
            )
    )
}

}

现在我想测试映射是否包含字符串到字符串条目,其中值不能为空。地图本身可能是空的。

如何测试动态键名?

4

1 回答 1

2

在合同的响应方面,您必须选择是使用地图表示法还是字符串表示法。如果您想对响应的片段进行断言,则必须将这些断言嵌入正文中或使用测试匹配器。

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

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

那么在assertKeys方法中提供断言就足够了。

于 2017-11-30T13:11:24.417 回答