Заглушка `session_id` в тестах интеграции Rails - PullRequest
0 голосов
/ 29 июня 2018

У меня вопрос по поводу интеграционных тестов Rails. У меня есть это приложение, которое говорит с этим другим внутренним приложением.

Приложение отправляет запрос к internal_app, и один из параметров этого запроса включает идентификатор session_id, сохраненный в файле cookie сеанса. По разным причинам запросы к внешним службам заглушаются с использованием гемов webmock и vcr. Это записывает запрос / ответ в файл фикстуры, поэтому при следующем запуске запроса он попадает в файл фикстуры вместо реальной службы.

Моя проблема в том, что session_id меняется при каждом запуске теста. Это означает, что, согласно webmock, сделанный запрос не соответствует заглушке запроса, что приводит к провалу теста. В тестах контроллера я могу получить доступ к сеансу напрямую и изменить / заглушить все, что захочу. С интеграционными тестами я не могу получить доступ к сеансу напрямую, и поэтому я застрял, используя сессионный идентификатор, который Rails генерирует для теста. Кто-нибудь знает хороший способ изменить / заглушить session_id для интеграционных тестов, чтобы что-то ожидаемое? Есть несколько менее предпочтительных способов, которые я рассматриваю (например, включение гема vcr для этих интеграционных тестов), но я бы предпочел найти способ, чтобы вместо session_id было какое-то ожидаемое значение.

Тесты выполняются с помощью Capybara / Poltergeist / phantomjs в приложении Rails 5.1.

1 Ответ

0 голосов
/ 29 июня 2018

Во время интеграционных тестов вы действительно не должны заглушать внутренности своего приложения, так как оно действительно побеждает точку интеграционных тестов. Тем не менее, вы можете настроить VCR на игнорирование session_id, используя параметр :match_requests_on - https://relishapp.com/vcr/vcr/docs/request-matching - при сопоставлении запроса, а затем использовать динамические кассеты - https://relishapp.com/vcr/vcr/v/3-0-3/docs/cassettes/dynamic-erb-cassettes - для вставки правильного session_id в ответ при необходимости

...