[PACT jvm匹配规则在运行测试时将被忽略

问题描述 投票:0回答:1

我正在使用PACT JVMhttps://github.com/DiUS/pact-jvm/tree/master/provider/pact-jvm-provider-junit我不知道为什么我的联系人中的匹配规则会被忽略。我的HTTP测试

@RunWith(SpringRestPactRunner.class) // Say JUnit to run tests with custom Runner
@Provider("provDataTest")// Set up name of tested provider
@PactBroker(host="pact-broker.services", port = "80")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,
        properties = {"spring.profiles.active=dev"},
        classes = Application.class)
public class ContractTesting {

    private static String token;

    @BeforeClass //Method will be run once: before whole contract test suite
    public static void setUpService() {
        //Run DB, create schema
        //Run service
        //...
        System.out.println("Now service in default state");
    }

    @TargetRequestFilter
    public void exampleRequestFilter(HttpRequest request) {

    }

    @State("Check correct data json structure in case code: 401")
    public void checkDataInCaseUnauthorized() {

    }

    @TestTarget // Annotation denotes Target that will be used for tests
    public final Target target = new HttpTarget(8082);

和我的合同文件

{
  "provider": {
    "name": "provDataTest"
  },
  "consumer": {
    "name": "test"
  },
  "interactions": [
    {
      "description": "Read all links_401",
      "request": {
        "method": "GET",
        "path": "/v1/consumer/me/link_social_account",
        "headers": {
          "invalidAuth": "401"
        }
      },
      "response": {
        "status": 401,
        "headers": {
          "Content-Type": "text/json;charset=utf-8"
        },
        "body": {
          "error": {
            "code": 401,
            "message": "session incorrect",
            "errors": []
          }
        },
        "matchingRules": {
          "body": {
            "$.error": {
              "matchers": [
                {
                  "match": "type"
                }
              ],
              "combine": "AND"
            },
            "$.error.code": {
              "matchers": [
                {
                  "match": "integer"
                }
              ],
              "combine": "AND"
            },
            "$.error.message": {
              "matchers": [
                {
                  "match": "type"
                }
              ],
              "combine": "AND"
            },
            "$.error.errors[*].message": {
              "matchers": [
                {
                  "match": "type"
                }
              ],
              "combine": "AND"
            },
            "$.error.errors[*].field": {
              "matchers": [
                {
                  "match": "type"
                }
              ],
              "combine": "AND"
            }
          },
          "header": {
            "Content-Type": {
              "matchers": [
                {
                  "match": "text/json;charset=utf-8",
                  "regex": "regex"
                }
              ],
              "combine": "AND"
            }
          }
        }
      },
      "providerStates": [
        {
          "name": "Check correct data json structure in case code: 401"
        }
      ]
    }
  ],
  "metadata": {
    "pactSpecification": {
      "version": "3.0.0"
    },
    "pact-jvm": {
      "version": "3.2.11"
    }
  }
}

并在运行后显示错误

Read all links_401 returns a response which has a matching body
      Read all links_401 returns a response which has a matching
body=BodyComparisonResult(mismatches={/=[BodyMismatch(expected=[B@480e8a7a, actual=[B@10378c35, mismatch=Actual body '[B@10378c35' is not equal to the expected body '[B@480e8a7a', path=/, diff=null)]},
 diff=[-{"error":{"code":401,"message":"session incorrect","errors":[]}}, 
+{"error":{"code":401,"message":"session incorrect, please login again (CR_A1004)","errors":[]}}])

我已经尝试过更改正则表达式,但问题仍在发生。仅在消息数据正确时才正确。

请帮助说明我的观点不正确。

谢谢,

pact pact-jvm
1个回答
0
投票

问题出在您的内容类型标题上:"Content-Type": "text/json;charset=utf-8"。 JSON有效负载的正确内容类型应为application/json。这就是为什么不应用匹配器的原因,因为该主体被视为文本有效内容。只需更改内容类型,然后将正文解析为JSON文档,并将匹配器应用于字段。

© www.soinside.com 2019 - 2024. All rights reserved.