从集成测试中的date_select中选择Date.today

时间:2012-07-13 17:21:03

标签: ruby-on-rails ruby-on-rails-3

我有一个带有date_select的表单,显示3个日期,月份和年份的选择框。我有一个rspec集成测试,我想用capybara选择今天的日期。所以我必须把Date.today分成一天,一个月和一年。这样做的好方法是什么?我可以做一些字符串拆分,但也许有更复杂的方法吗?

在这里,您可以看到用于选择硬编码日期的水豚代码:

select("13", :from => "visit_visit_date_3i")
select("July", :from => "visit_visit_date_2i")
select("2012", :from => "visit_visit_date_1i")

2 个答案:

答案 0 :(得分:0)

有一些方法可以从Date对象中提取日期部分。日期类还有一些常量数组,可以很容易地将诸如一周中的几天和几天的内容转换为英文版本。

因此:

Date.today.day 
=> 13
Date::MONTHNAMES[Date.today.month] 
=> "July"
Date.today.year 
=> 2012

所有这些都在Date的文档中,位于here

答案 1 :(得分:0)

您可以考虑使用timecop冻结当前日期。在测试其他方法是否处理“今天”或“今天一周”

时,这会派上用场
before { Timecop.freeze(Date.parse("Jul 13 2012") }
after { Timecop.return }

现在你可以select("13", :from => "visit_visit_date_3i"),它将适用于运行测试的任何日期。