【发布时间】:2016-11-04 05:43:20
【问题描述】:
如果当前日期介于 1 月 1 日至 8 月 1 日之间,我想测试一个遵循一条路径的方法,或者如果 当前日期 介于两者之间,它遵循另一条路径8 月 2 日至 12 月 31 日。示例:
def return_something_based_on_current_date
if date_between_jan_1_and_aug_1?
return "foo"
else
return "bar"
end
end
private
def date_between_jan_1_and_aug_1?
date_range = build_date_range_jan_1_through_aug_1
date_range === Date.today
end
def build_date_range_jan_1_through_aug_1
Date.today.beginning_of_year..Date.new(Date.today.year, 8, 1)
end
如您所见:return_something_based_on_current_date 在很大程度上依赖于Date.today,它调用的私有方法也是如此。这使得在此方法中测试两个路径变得困难,因为Date.today 动态返回当前日期。
出于测试目的:我需要 Date.today 返回我想要的静态日期,以便我可以测试每个路径是否正常工作。
- 如果当前日期在 1 月 1 日到 8 月 1 日之间,我需要测试路径是否正常运行
- 如果当前日期在 8 月 1 日之后,我需要测试路径是否正常工作。
问题:有没有办法让Date.today 返回一个我在规范中组成的值?在测试return_something_based_on_current_date 的规范之后:我希望Date.today 的动态实现回到它通常的实现。我只需要控制Date.today 来测试这个方法。
【问题讨论】:
标签: ruby-on-rails ruby rspec