Правильно издеваетесь над переменными среды с помощью minitest?

Как правильно имитировать переменные среды при написании модульных тестов с использованием минитеста для Ruby on Rails?

Итак, я исхожу из Python, где стандартным способом является использование декоратора следующим образом:

@mock.patch.dict(os.environ, {'mocked_key': 'mocked_result'}

Я немного удивлен, что не смог найти ничего подобного в минитесте при поиске в документации и переполнении стека.

Любые рекомендации по наилучшему подходу к этому будут высоко оценены!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете устанавливать и сбрасывать переменные среды с помощью метода, например:

# in test_helper.rb (for example)
def mock_env(partial_env_hash)
  old = ENV.to_hash
  ENV.update partial_env_hash
  begin
    yield
  ensure
    ENV.replace old
  end
end

# usage
mock_env('MY_ENV_VAR' => 'Hello') do
  assert something?
end

В качестве альтернативы вы можете использовать гем Climate_control для управления переменными среды:

ClimateControl.modify CONFIRMATION_INSTRUCTIONS_BCC: '[email protected]' do
  sign_up_as '[email protected]'

  confirm_account_for_email '[email protected]'

  expect(current_email).to bcc_to('[email protected]')
end

Также есть достойная статья под названием Как переменные среды делают ваш набор тестов Ruby ненадежным, в которой более подробно рассказывается о том, как устанавливать и сбрасывать переменные среды во время тестов, если вы хотите прочитать о некоторых других вариантах.

Фантастика, спасибо. Один дополнительный вопрос: у меня уже есть насмешки в моем тесте, поэтому я стараюсь избегать использования блока do... Является ли альтернатива просто случаем изменения ENV перед выполнением и возврата к старому значению после?

LondonAppDev 17.04.2023 18:03

Да, вспомогательный метод в основном такой же, как блок before и after.

anothermh 17.04.2023 18:05

Другие вопросы по теме