1

Jenkins でのみ失敗するプロバイダー テストがあり、デバッグできません。

Jenkins からの関連ログを次に示します。

Error Message

0 - $.body.2 -> Expected name='FXUHHqWrZZcodhHBmeLf' but was missing


0) a request to get all clients returns a response which has a matching body
      $.body.2 -> Expected name='FXUHHqWrZZcodhHBmeLf' but was missing

      Diff:

(一部省略…)

  @10
          ],
  -        "id": "c53927c3-0d1c-48a8-8f0a-7560be89daa5",
  -        "name": "FXUHHqWrZZcodhHBmeLf",
  +        "id": "9daaad0a-8a2d-4e73-a963-fa1625cec110",
  +        "name": "name",
  +        "privileges": [
  +            "CHECK_TOKEN",
  +            "MANAGE_CLIENT",
  +            "MANAGE_IDP",
  +            "MANAGE_USER"
  +        ],
          "redirectUris": [

相互作用は、pact ファイルでは次のようになります。

{
        "description": "a request to get all clients",
        "request": {
            "method": "GET",
            "path": "/some/url/client"
        },
        "response": {
            "status": 200,
            "headers": {
                "Content-Type": "application/json; charset=UTF-8"
            },
            "body": [
                {
                    "accessTokenValiditySeconds": 42721462,
                    "allowedScopes": [
                        "JnTfAlnHKVSDzoWnUqZv"
                    ],
                    "autoApprove": true,
                    "grantTypes": [
                        "VfWudsTQINERQCnVKvoK"
                    ],
                    "id": "c53927c3-0d1c-48a8-8f0a-7560be89daa5",
                    "name": "FXUHHqWrZZcodhHBmeLf",
                    "redirectUris": [
                        "vWxSTjgJQvwUtwphDGcn"
                    ],
                    "refreshTokenValiditySeconds": 12393550,
                    "secretRequired": true
                }
            ],
            "matchingRules": {
                "$.body[*].allowedScopes[*]": {
                    "match": "type"
                },
                "$.body[*].redirectUris[*]": {
                    "match": "type"
                },
                "$.body[*].grantTypes[*]": {
                    "match": "type"
                },
                "$.body[*].redirectUris": {
                    "min": 0,
                    "match": "type"
                },
                "$.body[*].autoApprove": {
                    "match": "type"
                },
                "$.body": {
                    "min": 1,
                    "match": "type"
                },
                "$.body[*].id": {
                    "regex": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
                },
                "$.body[*].accessTokenValiditySeconds": {
                    "match": "integer"
                },
                "$.body[*].secretRequired": {
                    "match": "type"
                },
                "$.body[*].refreshTokenValiditySeconds": {
                    "match": "integer"
                },
                "$.body[*].name": {
                    "match": "type"
                },
                "$.body[*].allowedScopes": {
                    "min": 0,
                    "match": "type"
                },
                "$.body[*].grantTypes": {
                    "min": 0,
                    "match": "type"
                }
            }
        },
        "providerState": "the 'zero' client exists"
    },

名前は正確な値ではなくタイプで一致する必要があるという印象を受けており、差分に「名前」フィールドがあるようです。

このテストが失敗するのはなぜですか?

編集:

これは、協定フラグメントを生成するコードです。

           builder
            .given("the 'zero' client exists")
            .uponReceiving("a request to get all clients")
            .path("/some/url/client")
            .method("GET")
            .willRespondWith()
            .status(200)
            .body(PactDslJsonArray
                    .arrayMinLike(1)
                    .uuid("id")
                    .booleanType("secretRequired")
                    .eachLike("allowedScopes", stringType())
                    .eachLike("grantTypes", stringType())
                    .eachLike("redirectUris", stringType())
                    .integerType("accessTokenValiditySeconds")
                    .integerType("refreshTokenValiditySeconds")
                    .booleanType("autoApprove")
                    .stringType("name")
                    .closeObject())
            .toFragment();
4

1 に答える 1