Как я могу получить доступ к объектам "request" и "session" из моих тестов rspec? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть приложение Rails 4.2, которое работает по-разному в зависимости от имени хоста.Я знаю, что в некоторых кругах эта практика неодобрительна, но мне удалось заставить одну и ту же кодовую базу работать примерно на 400 веб-сайтах, сэкономленное время | cpu | ram | db | money | белок огромно.

Например: Для www.example.com для пользователя john@doe.com может отображаться продукт 1 с ценой в 5000 долларов;

для www.blah.com для всех пользователей может отображаться продукт 1 с ценой в 123 доллара.,И стоимость доставки составляет $ 400.

Все это основано на имени хоста и количестве переменных, сохраняемых в сеансе, когда пользователи посещают и / или входят на сайт.

Я бы хотелнаписать набор спецификаций для тестирования различных аспектов приложения, но мне нужно иметь возможность установить request.host, формат и некоторые вещи в сеансе.

Как мне это сделать?

Позднее редактирование:

Мне удалось найти и заменить с помощью исходного кода и получить доступ к сеансу / запросу из некоторых вспомогательных методов.Теперь я могу заглушки в своих спецификациях следующим образом:

            allow_any_instance_of(ApplicationHelper).to receive(:detect_user_info_by_ip).with("ip").and_return( { :provider => "dummy", :ip => "127.0.0.1", :lat => 1.0, :latitude => 1.0, :lon => 2.1, :long => 2.1, :longitude => 2.1, :regi
on => "EU", :country => "GB", :city => "Testville", :country_iso2 => "GB", :success => true} )
            allow_any_instance_of(ApplicationHelper).to receive(:detect_user_info_by_ip).and_return( { :provider => "dummy", :ip => "127.0.0.1", :lat => 1.0, :latitude => 1.0, :lon => 2.1, :long => 2.1, :longitude => 2.1, :region => "EU",
 :country => "GB", :city => "Testville", :country_iso2 => "GB", :success => true} )

Итог: проще реорганизовать и заглушить, чем получить доступ к объектам запроса и сеанса изнутри спецификаций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...