Провайдер не регистрирует взаимодействие

Я использую реализацию Pact Go для тестирования контрактов. Я сделал тест провайдера, который не работает, потому что мне нужно смоделировать запрос моей службы в Twilio.

Я создал один объект Pact для контракта между моим потребителем и этим поставщиком, а затем еще один объект с именем twilioPact для контракта между моим поставщиком и Twilio. Я добавил взаимодействие для POST в конечную точку Twilio, но в pact.log я не вижу, чтобы он был зарегистрирован. Мой тест правильно выполняет запрос, но для него не зарегистрировано никакого взаимодействия, поэтому я получаю ошибку 500 с фиктивного сервера.

У кого-нибудь есть опыт использования Pact с "поставщиком", который также является "потребителем"?

РЕДАКТИРОВАТЬ: После разговора с Мэттом Fellows мне сообщили, что я использовал Pact неправильно, и не должен пытаться запустить фиктивный сервис при выполнении проверки провайдера. Я так и подозревал, но ни один из примеров, которые я видел, не относился к поставщику, у которого была зависимость. Я смог заставить свою проверку провайдера работать, написав потребительский тест и передав сгенерированный файл пакта в службу пакта-заглушки, чтобы действовать в качестве насмешки над Twilio.

1 ответ

Решение

Вот несколько вещей для рассмотрения:

  1. Лучше провести два отдельных контрактных теста между client <-> Twilio Adapter, а также Twilio Adapter <-> Twilio, Можно делать то, что вы делаете, но это сделает тесты более сложными и, вероятно, будет труднее читать / понимать. Тестирование их изолированно дает вам гораздо больше контроля.
  2. Выполняя предыдущий контрактный тест, а не последовательную цепочку другого сервиса макетов пакта для зависимости вашего Twilio-адаптера (провайдера) (Twilio), для этой работы лучше всего использовать стандартные инструменты макетов / заглушек - либо основанные на коде mocks/doubles, либо сервис удваивается (например, Mountebank) или сервер-заглушка, поставляемый с Pact [1]. Не забывайте, что вы сможете проверить эти предположения с помощью другого контрактного теста, так что вы можете сделать это безопасно.
  3. Возможно, что из-за того, что у вас запущены два фиктивных сервера (один для насмешки над адаптером Twilio, а другой для насмешки над Twilio), ваши запросы отправляются в одну и ту же службу и все запутываются

[1] Вот список двоичных файлов и т. Д., Которые поставляются с pact-go:

    tree -L 3 /path/to/pact-go

    .
    ├── pact
    │   ├── README.md
    │   ├── bin
    │   │   ├── pact-broker
    │   │   ├── pact-mock-service
    │   │   ├── pact-provider-verifier
    │   │   ├── pact-publish
    │   │   └── pact-stub-service
    │   └── lib
    │       ├── app
    │       ├── ruby
    │       └── vendor
    └── pact-go
Другие вопросы по тегам