1

私は Pact も groovy も初めてです。

プロバイダーに渡す Pact を書きたいと思います。

プロバイダーは、指定されたリクエストに対して、 のような 文字列の配列で応答する必要があります["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

    }
}

このテストでは、次の 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": [
          "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"
    }
  }
}

matchingRules があり、これは良さそうです。しかし、ルート レベルにオブジェクトがあり、配列をルートにする必要があります。

配列をルート要素として取得し、値ではなく型で一致する文字列を取得する方法はありますか?

4

0 に答える 0