Провайдер не регистрирует взаимодействие
Я использую реализацию Pact Go для тестирования контрактов. Я сделал тест провайдера, который не работает, потому что мне нужно смоделировать запрос моей службы в Twilio.
Я создал один объект Pact для контракта между моим потребителем и этим поставщиком, а затем еще один объект с именем twilioPact для контракта между моим поставщиком и Twilio. Я добавил взаимодействие для POST в конечную точку Twilio, но в pact.log я не вижу, чтобы он был зарегистрирован. Мой тест правильно выполняет запрос, но для него не зарегистрировано никакого взаимодействия, поэтому я получаю ошибку 500 с фиктивного сервера.
У кого-нибудь есть опыт использования Pact с "поставщиком", который также является "потребителем"?
РЕДАКТИРОВАТЬ: После разговора с Мэттом Fellows мне сообщили, что я использовал Pact неправильно, и не должен пытаться запустить фиктивный сервис при выполнении проверки провайдера. Я так и подозревал, но ни один из примеров, которые я видел, не относился к поставщику, у которого была зависимость. Я смог заставить свою проверку провайдера работать, написав потребительский тест и передав сгенерированный файл пакта в службу пакта-заглушки, чтобы действовать в качестве насмешки над Twilio.
1 ответ
Вот несколько вещей для рассмотрения:
- Лучше провести два отдельных контрактных теста между
client
<->Twilio Adapter
, а такжеTwilio Adapter <-> Twilio
, Можно делать то, что вы делаете, но это сделает тесты более сложными и, вероятно, будет труднее читать / понимать. Тестирование их изолированно дает вам гораздо больше контроля. - Выполняя предыдущий контрактный тест, а не последовательную цепочку другого сервиса макетов пакта для зависимости вашего Twilio-адаптера (провайдера) (Twilio), для этой работы лучше всего использовать стандартные инструменты макетов / заглушек - либо основанные на коде mocks/doubles, либо сервис удваивается (например, Mountebank) или сервер-заглушка, поставляемый с Pact [1]. Не забывайте, что вы сможете проверить эти предположения с помощью другого контрактного теста, так что вы можете сделать это безопасно.
- Возможно, что из-за того, что у вас запущены два фиктивных сервера (один для насмешки над адаптером 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