Извлеките точное значение, используемое в 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: это не рельсы, а роды.

Спасибо Андре


person André    schedule 03.05.2017    source источник


Ответы (1)


Я не уверен, поддерживает ли Pact Ruby это точное требование, однако, углубляясь в почему вы это делаете, я бы предположил, что это плохая идея.

Это функциональный тест, который Pact сознательно делает трудным для поддержки. См. https://docs.pact.io/best_practices/contract_tests_not_functional_tests.html для получения дополнительной информации. подробности о том, почему. Существуют более эффективные инструменты для работы с такого рода тестами, и они не принадлежат к базе кода потребителя (они абсолютно действительно принадлежат набору тестов провайдеров).

Pact - это инструмент тестирования контрактов, поэтому его интересуют только изолированные контракты запроса / ответа, а не связанные в соответствии с функциональными тестами.

person Matthew Fellows    schedule 04.05.2017