运行验证时,合同匹配规则将被忽略

时间:2019-07-19 19:34:36

标签: pact

我合同中的匹配规则被忽略。我有一份合同,需要确保某些值是字符串。在运行verify命令时,由于测试正在寻找完全匹配的内容,因此出现错误。我在使用者端(javascript)pact Matchers中使用,以便仅检查数据类型,而不检查值本身。该提供程序是使用pact版本1.20.0的Rails应用程序。

我也尝试过使用正则表达式,但问题仍然存在。

这是合同的样子。 我已经删除了一些敏感数据。

{
  "consumer": {
    "name": "consumer"
  },
  "provider": {
    "name": "provider"
  },
  "interactions": [
    {
      "description": "a request",
      "providerState": "provider state",
      "request": {
        "method": "POST",
        "path": "/path/api/stuff",
        "headers": {
          "Authorization": "Bearer token",
          "Content-Type": "application/json"
        }
      },
      "response": {
        "status": 200,
        "headers": {
          "Content-Type": "application/json; charset=utf-8"
        },
        "body": {
          "source_code": "abcdef"
        },
        "matchingRules": {
          "$.body": {
            "match": "type"
          }
        }
      }
    }
  ],
  "metadata": {
    "pactSpecification": {
      "version": "3.0.0"
    }
  }
}

这是我得到的错误。

   Diff
   --------------------------------------
   Key: - is expected 
        + is actual 
   Matching keys and values are not shown

    {
   -  "source_code": "abcdef"
   +  "source_code": "xde5r8"
    }

   Description of differences
   --------------------------------------
   * Expected "abcdef" but got "xde5e3" at $.source_code

我希望这个测试能够成功,因为我希望类型匹配,并且在这种情况下,两个响应都是字符串。也许我在这里错过了一些东西。

1 个答案:

答案 0 :(得分:0)

这似乎是v3主体匹配器,并非所有语言实现都共享(参见[1])。您使用的消费者语言(例如Pact JVM)可能会生成v3合同,但正在被v2提供程序(例如Pact JS)验证。