У меня есть сложное условие для утверждения одним из моих методов:
Сегодня это:
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 завершилась неудачно