0

我正在尝试使用这样的数组:

 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
4

2 回答 2

1

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

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

当然,我们可以完全偏执或肛门,并测试从我们的方法到原子级别的代码的各个方面,并确信一切正常,或者我们可以相信语言的开发人员正在尽其所能,并建立在那。到目前为止,我还没有理由怀疑他们失败了,所以我可以走更简单的道路。

于 2013-02-16T17:50:31.673 回答
1
#<Date: 2013-01-31 (4912645/2,0,2299161)>

这是对象的可打印表示。您不能只写它并希望 ruby​​ 将其理解为日期。日期对象是用构造函数创建的:

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 ),..]
于 2013-02-16T17:56:49.780 回答