模拟Date.parse的日期

时间:2014-08-03 07:56:26

标签: ruby date

我正在对日期解析进行一些测试。我可以通过以下方式模拟日期:

my_str_date = '08022014at0600 +00:00'
my_new_date = DateTime.strptime(my_str_date, "%d%m%Yat%H%M %z").to_time
Time.stub(:now).and_return(my_new_date)

这在大多数情况下都足够好,但是当我想根据星期几得到日期时,我会Date.parse('wednesday')例如,不幸的是,它需要当前日期。

我不知道如何找到全局解决方案来模拟一年中适用于Time.nowDate.parse的特定日期。有什么想法吗?

我虽然关于Timecop库,但它似乎没有处理我的情况。

2 个答案:

答案 0 :(得分:0)

require 'time'

def get_weekday_date(name, ref = Date.today)
  day = {"sun"=>0, "mon"=>1, "tue"=>2, "wed"=>3, "thu"=>4, "fri"=>5, "sat"=>6}[name[0, 3].downcase]
  ref - ref.wday + day
end

date = get_weekday_date('wed', Date.parse("2010-10-10"))
puts date.strftime('%Y-%m-%d %A')  ## 2010-10-13 Wednesday

答案 1 :(得分:0)

我无法对解析String的功能进行明确的集成测试,因为Date.parse不使用Time.now作为当前时间的参考。所以我决定使用Chronic.parse gem中的chronic而不是Date.parse

Time.now上的模拟现在在我调用Chronic.parse('wednesday')时使用,它可以帮助我根据特定时间检查我的功能是否正常工作。现在