Извлечь точное значение, используемое в PACT (когда сопоставление выполняется с помощью регулярного выражения в качестве значения, неизвестного изначально))
У меня есть провайдер службы рубинового пакта, который фиксирует мой запрос. Я хотел бы извлечь точное значение, указанное в запросе (которому соответствует Pact.term / Pact.like), для дальнейшей обработки с этим значением после того, как поставщик услуг pact ответил на запрос.
Пример: функция сброса пароля. Код выполняет API-вызов к почтовой службе, предоставляя ссылку для сброса пароля в качестве параметра. Pact фиксирует запрос и успешно его проверяет, проверяя данные. Я передаю reset_link в качестве одного из параметров (тело Json). Это соответствует в Pact.term. Все хорошо. Но я также хочу восстановить точное значение, которое использовалось в запросе (скажем, reset_link: ' http://sample.com/reset-password?key=12345'), чтобы я мог сделать следующий запрос и проверить эту точную ссылку действительно позволяет успешный сброс пароля.
Теперь, если я отправлял электронную почту напрямую, это легко сделать, я могу просто разобрать Mail::TestMailer.deliveries.last
Как я могу это сделать?
Я прошел через код, даже создание подкласса Pact::SomethingLike не сработало бы, так как метод сравнения - прекрасный функциональный модуль программирования, а не метод в классе.
Есть ли ловушка до / после или способ получить весь веб-запрос?
PS: я знаю, что это обычно проверяется используемой библиотекой. Разрешенный библиотекой способ настройки функциональности заключается в переопределении определенных методов, мне нужно повторно протестировать всю функциональность.
PPS: это не рельсы, а роды.
Спасибо Андре
1 ответ
Я не уверен, что Pact Ruby поддерживает это точное требование, однако, пытаясь понять, почему вы это делаете, я бы сказал, что это плохая идея.
Это функциональный тест, который Pact сознательно затрудняет для поддержки. См. https://docs.pact.io/best_practices/contract_tests_not_functional_tests.html для более подробной информации о том, почему. Существуют лучшие инструменты для работы для такого рода тестов, и они не входят в базу потребительского кода (они абсолютно принадлежат к тестовому комплекту провайдеров).
Pact - это инструмент тестирования контрактов, и поэтому он заинтересован только в изолированных контрактах запросов / ответов, а не в цепочках, как это предусмотрено функциональными тестами.