Как сгенерировать Pact-файл с телом ответа, совпадающим с массивом Strings с помощью groovy
Я новичок в Пакте и новичок в Groovy тоже.
Я хочу написать Пакт, чтобы передать его поставщику.
Поставщик должен ответить на данный запрос с массивом строк, таких как ["foo", "bar", "foobar"]
,
Вот мое рабочее состояние, которое разделено на необходимые части, но все еще выполнимо:
import au.com.dius.pact.consumer.groovy.PactBuilder
import groovyx.net.http.RESTClient
import spock.lang.Specification
class MyPact extends Specification {
def "some test"() {
given:
when:
def pactBuilder = new PactBuilder()
pactBuilder {
serviceConsumer "consumer"
hasPactWith "provider"
port 1234
given('some provider state')
uponReceiving('a request')
withAttributes(method: 'get', path: '/my/endpoint')
willRespondWith(status: 200)
withBody(["foo", "bar", "foobar"])
}
pactBuilder.run() { mockServer ->
RESTClient('http://localhost:1234/').get(path: '/my/endpoint')
}
then: 1 == 1
}
}
Этот тест генерирует следующий файл пакта:
{
"provider": {
"name": "provider"
},
"consumer": {
"name": "consumer"
},
"interactions": [
{
"description": "a request",
"request": {
"method": "GET",
"path": "/my/endpoint"
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json"
},
"body": [
"foo",
"bar",
"foobar"
]
},
"providerStates": [
{
"name": "some provider state"
}
]
}
],
"metadata": {
"pact-specification": {
"version": "3.0.0"
},
"pact-jvm": {
"version": "3.5.6"
}
}
}
Файл Pact ожидает, что поставщик всегда ответит ["foo", "bar", "foobar"]
То, что я хочу, это общий массив строк.
Когда я попробую следующее:
withBody {
key eachLike (3, "foo")
}
сгенерированный файл Pact выглядит так:
{
"provider": {
"name": "provider"
},
"consumer": {
"name": "consumer"
},
"interactions": [
{
"description": "a request",
"request": {
"method": "GET",
"path": "/my/endpoint"
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json"
},
"body": {
"key": [
"foo",
"foo",
"foo"
]
},
"matchingRules": {
"body": {
"$.key": {
"matchers": [
{
"match": "type"
}
],
"combine": "AND"
}
}
}
},
"providerStates": [
{
"name": "some provider state"
}
]
}
],
"metadata": {
"pact-specification": {
"version": "3.0.0"
},
"pact-jvm": {
"version": "3.5.6"
}
}
}
Есть соответствующие правила, и это выглядит хорошо. Но есть объект на корневом уровне, и мне нужен массив, чтобы быть корнем.
Есть ли способ получить массив в качестве корневого элемента и строки, сопоставленные по типу, а не по значению?