Использование Pact.eachLike(), когда содержимое массива варьируется для каждого элемента

Привет, у меня есть тест Consumer, созданный с помощью Pact NPM https://www.npmjs.com/package/pact

Я использую следующий код для генерации pact.json:

provider
    .addInteraction({
        state: 'test',
        uponReceiving: 'a test,
        withRequest: {
          method: 'GET',
          path: '/test'
        },
        willRespondWith: {
            status: 200,
            headers: { 'Content-Type': 'application/json' }
            body: {
                "company": like("My big company"),
                "factories": eachLike({
                    "location": like("Sydney"),
                    "capacity": like(5)
                },{min:1})
            }
        }
    })
    .then(function(){ done(); });

Он генерирует следующий файл testconsumer-testprovider.json:

{
  "consumer": {
    "name": "TestConsumer"
  },
  "provider": {
    "name": "TestProvider"
  },
  "interactions": [
    {
      "description": "a request for loans",
      "providerState": "broker is logged in, list all loans",
      "request": {
        "method": "GET",
        "path": "/test"
      },
      "response": {
        "status": 200,
        "headers": {
          "Content-Type": "application/vnd.hal+json"
        },
        "body": {
          "company": "My big company",
          "factories": [
            {
              "location": "Sydney",
              "capacity": 5
            }
          ]
        },
        "matchingRules": {
          "$.headers.Content-Type": {
            "match": "regex",
            "regex": "application\\/.*json.*"
          },
          "$.body.company": {
            "match": "type"
          },
          "$.body.factories": {
            "min": 1
          },
          "$.body.factories[*].*": {
            "match": "type"
          },
          "$.body.factories[*].location": {
            "match": "type"
          },
          "$.body.factories[*].capacity": {
            "match": "type"
          }
        }
      }
    }
  ],
  "metadata": {
    "pactSpecification": {
      "version": "3.0.0"
    }
  }
}

Однако, когда мы проверяем следующие данные, мы получаем ошибку с geographicCoords, потому что это неожиданный ключ / значение:

{
    "company": "My Company",
    "factories": [
        {
            "location": "Sydney",
            "capacity": 5
        },
        {
            "location": "Sydney",
            "geographicCoords": "-0.145,1.4445",
            "capacity": 5,
        }
    ]
}

Поэтому есть возможность разрешить неожиданные ключи / значения в массивах, потому что мы проверяем только требуемые ключи / значения, и мы не хотим, чтобы в будущем пакт-тесты проваливались, когда новые значения добавляются нашим поставщикам.

1 ответ

Описанный вами сценарий поддерживается, см. Пример https://github.com/pact-foundation/pact-js/tree/master/examples/e2e.

Если вы должны были удалить, скажите объект соответствия и запустите тесты, все по-прежнему работает.

Если у вас все еще есть проблемы, пожалуйста, поднимите дефект на pact-js хранилище, и мы доберемся до сути.

Другие вопросы по тегам