Установка Rails.env
на что-то отличное от test
внутри теста - плохая идея. Хотя в этом случае вы можете «сойти с рук», это может вызвать всевозможные странные побочные эффекты в целом, такие как запись данных в не тестовую базу данных.
Кроме того, , кажется, вы пишете модульные тесты для частных методов, что, как правило, является плохой идеей. Вы должны только нормально протестировать открытый интерфейс класса.
Как указано выше, этот тип конфигурации в идеале должен находиться в файле конфигурации, например, например. application.yml
.
Другой ответ уже показывает, как вы могли бы заглушить поведение, но в качестве еще одной альтернативы вы могли бы рассмотреть внедрение среды как зависимость метода:
def driver_iq_api(env: Rails.env)
if env.production?
'https://admin.sss/xmlpost.cfm'
else
'https://eeem/ws/xmlpost.cfm'
end
end
describe '#driver_iq_api' do
it 'production env' do
expect(model.driver_iq_api(env: 'production'.inquiry)).to eq 'https://admin.sss/xmlpost.cfm'
end
it 'test env' do
expect(model.driver_iq_api(env: 'test'.inquiry)).to eq 'https://eeem/ws/xmlpost.cfm'
end
end
Обратите внимание, что, например, 'test'.inquiry
возвращает экземпляр ActiveSupport::StringInquirer
, который аналогичен вызову Rails.env
.
... Но, повторяя мою первоначальную точку зрения, я бы вообще не стал проверять этот метод.