Ruby / Rails 4.2 - если A && B, где условие B зависит от среды Rails - PullRequest
0 голосов
/ 26 июня 2018

У меня есть сложное условие для утверждения одним из моих методов:

Сегодня это:

if deal.video_url.present? && deal.video_url_changed? 
  # do stuff
  # about 15 lines of code
end

К сожалению, story_step.st_video_url_changed? дает мне ложные положительные и отрицательные значения в тестах Rspec (см. Также упомянутую здесь проблему: Как я могу проверить, что ни один атрибут в модели не был изменен с помощью rspec? )

В любом случае, я хочу изменить строку проверки состояния, чтобы она стала

"если мы находимся в разработке или производстве рельсов, пожалуйста, отметьте A (deal.video_url.present?) && B (deal.video_url_changed?), но если Rails environement - Test, ТОЛЬКО проверять A deal.video_url.present?

Конечно, я мог бы написать:

if Rails.env.development? || Rails.env.production?
  if deal.video_url.present? && deal.video_url_changed? 
    # do stuff
    # about 15 lines of code
  end   
else # test environment
  if deal.video_url.present? 
    # do stuff
    # about 15 lines of code
  end

Но я чувствую, что на самом деле не СУХОЙ повторять дважды точные те же 15 строк кода, которые должны выполняться при выполнении условия.

Я мог бы факторизовать, создав новый метод

if Rails.env.development? || Rails.env.production?
  if deal.video_url.present? && deal.video_url_changed? 
    new_method_to_factorize
  end
else # test environment
  if deal.video_url.present? 
    new_method_to_factorize
  end
end

def new_method_to_factorize
  # do stuff
  # about 15 lines of code
end

Но мне интересно, можно ли написать это более аккуратно и без создания нового метода?

Я пытался, но потерпел неудачу с кодом ниже

if deal.video_url.present? && (deal.video_url_changed? unless Rails.env.test?) 
  # do stuff
  # about 15 lines of code
end

EDIT

После многих комментариев я понял, что пытаюсь поставить костыли, в то время как я должен разобраться с самой сути ошибки. эта ошибка была создана, потому что я нашел хакерский способ связать предложения и шаги. Чтобы решить исходную проблему, я создал новый вопрос Stackoverflow: Rails 4.2 / Rspec / rspec-retry - связь с принадлежностью / has_many завершилась неудачно

1 Ответ

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

Вот быстрое и очень грязное решение:

if deal.video_url.present? && !Rails.env.test? && deal.video_url_changed?
  # do stuff
end

Но, как уже упоминалось выше, я настоятельно советую вам не делать этого .

Редизайн кода / и / или тестов. Не разбирайте код для прохождения тестов - это значит, что ваши тесты сейчас проверяют не то!

...