如何在spring cloud合约中创建一个非空的地图消费者(使用groovy)?

时间:2017-03-27 17:41:49

标签: groovy spring-cloud-contract

我正在为一个http请求写一个 spring cloud contract ,其中一个json主体,其中一个字段(我们称之为 myMap )应该是 non空映射(字符串到字符串)。所以请求者(又名消费者)必须有这样的东西: " myMap":{" key":" val"}

是否有可能在合同中强制执行此类事情?

这里是我为了确保上下文而写的现有合约的一个例子:

  package contracts


org.springframework.cloud.contract.spec.Contract.make {
    description("""
        Represents a successful scenario of registering new host 

        given:
            hostProperties are valid
        then:
            we'll register the host
    """)
    request {
        method 'POST'
        urlPath value(consumer(~/\/api\/hosts\/[a-zA-Z0-90-9]+/), producer('/api/hosts/icsl7875'))
        body([
            timeStamp     : $(consumer(anyNumber()), producer(334)),
            hyperThreaded : $(consumer(regex('^(true|false)$')), producer(false)),
            virtualMachine: $(consumer(regex('^(true|false)$')), producer(false)),
            poolName      : $(consumer(regex('(.+)')), producer("dev_regression")),
            osImage       : $(consumer(regex('(.+)')), producer("osImage1")),
            cores         : $(consumer(anyNumber()), producer(2)),
            memory        : $(consumer(anyNumber()), producer(256)),
            osRelease     : $(consumer(regex('(.+)')), producer("osRelease1")),
            wsmVeriosn    : $(consumer(regex('(.+)')), producer("8.2.16")),
            cpuCount      : $(consumer(anyNumber()), producer(2445L)),
            cpuMhz        : $(consumer(anyNumber()), producer(22354L)),
            cpuMips       : $(consumer(anyNumber()), producer(256F))
        ])
        headers {
            contentType(applicationJsonUtf8())
        }
    }
    response {
        status 201
        body([
            groupId: $('067e6162-3b6f-4ae2-a171-2470b63dff00')
        ])
        headers {
            contentType(applicationJson())
        }
    }
}

1 个答案:

答案 0 :(得分:1)

FOR REQUEST 我想你可以使用stubMatcher部分。只有存在条目时才应解决WireMock中的JSON路径。因此,如果您传入stubMatcher正确的json路径并验证它byEquality,那么它应该没问题。

FOR RESPONSE: 您可以使用testMatcher部分并与byCommandhttps://cloud.spring.io/spring-cloud-contract/1.0.x/#_dynamic_properties_in_matchers_sections)一起委托。在该方法中,您必须验证条目是否为空。在文档中,有jsonPath('$.duck', byCommand('assertThatValueIsANumber($it)'))。你需要做类似的事情,但断言条目是非空的。