如何测试日期对象数组是正确的

时间:2013-02-16 17:22:25

标签: ruby rspec

我正在努力 我拿这样一个数组:

 MY_ARRAY = ["Jan 31, 2013", "Feb 28, 2013", "Mar 31, 2013"] 

然后把它变成日期:

def array_as_date_objects
  MY_ARRAY.map { |month| Date.parse(month)}
end

产生这个:

 [#<Date: 2013-01-31 (4912645/2,0,2299161)>, #<Date: 2013-02-28 (4912703/2,0,2299161)>, #<Date: 2013-03-31 (4912763/2,0,2299161)>]

大。但我也想测试这个日期对象数组是我期望的那样。我该怎么做?

我曾希望这样的东西可行,但是标签会评论剩下的信息。

 MyClass.new.refined_schedule.should == :[#<Date: 2013-01-31 (4912645/2,0,2299161)>, #<Date: 2013-02-28 (4912703/2,0,2299161)>, #<Date: 2013-03-31 (4912763/2,0,2299161)>]

编辑:所以只是为了提供更多关于我的情况的信息,我主要关心的是如何存根这个数组。我不需要相信Ruby正确地创建了数组,我只需要正确地存根方法。很抱歉不清楚。

describe "#final_schedule" do
  it "generates an array of pay dates that do not fall on any weekend day" do
    test_schedule = MyClass.new
    test_schedule.stub(:refined_schedule) { [#<Date: 2013-01-31 (4912645/2,0,2299161)>, #<Date: 2013-02-28 (4912703/2,0,2299161)>, #<Date: 2013-03-31 (4912763/2,0,2299161)> ] } 
    test_schedule.final_schedule.should == [ "Thursday, Jan 31, 2013", "Thursday, Feb 28, 2013","Sunday, Mar 31, 2013"]
  end
 end

2 个答案:

答案 0 :(得分:1)

当我编写代码测试时,我会查看是否有一个数组,并且该数组的所有内容都属于某种类型。

这些单独的元素是否通过解析正确地从字符串转换为DateTime对象,并不关心我,因为在编译时语言测试期间会发生特定测试,并且是DateTime的单元测试的一部分。

当然,我们可以完全偏执或肛门,并从我们的方法到原子级别测试代码的每个方面,并确信一切正常,或者我们可以相信语言的开发人员正在发挥作用,并以此为基础。到目前为止,我没有理由怀疑他们失败了,所以我可以走更容易的路。

答案 1 :(得分:1)

#<Date: 2013-01-31 (4912645/2,0,2299161)>

这是对象的可打印表示。你不能只写它并希望ruby将它理解为约会。使用构造函数创建Date对象:

Date.new( 2013, 1, 31 )

因此,如果您想测试解析结果是否正确(有时需要,例如对于这些格式:mm / dd / yy vs dd / mm / yy),您应该做类似的事情:

MyClass.new.refined_schedule.should == [Date.new( 2013, 1, 31 ), Date.new( 2013, 2, 28 ),..]