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
#<Date: 2013-01-31 (4912645/2,0,2299161)>

これは、オブジェクトの印刷可能な表現です。あなたはただそれを書いて、ルビーがそれを日付として理解することを望むことはできません。日付オブジェクトはコンストラクターで作成されます:

Date.new( 2013, 1, 31 )

したがって、解析結果が正しいかどうかをテストする場合(たとえば、mm / dd/yyとdd/mm / yyの形式の場合に必要になることがあります)、次のようにする必要があります。

MyClass.new.refined_schedule.should == [Date.new( 2013, 1, 31 ), Date.new( 2013, 2, 28 ),..]
于 2013-02-16T17:56:49.780 に答える
1

コードのテストを作成するときは、配列が返されたかどうか、およびその配列のすべての内容が特定の型であることを確認します。

これらの個々の要素が解析によって文字列から DateTime オブジェクトに正しく変換されるかどうかは、私には関係ありません。その特定のテストは、言語のコンパイル時に言語のテスト中に発生し、DateTime の単体テストの一部であるためです。

確かに、私たちは完全に偏執的または肛門的になり、メソッドから原子レベルまでコードのあらゆる側面をテストし、すべてが正しく機能していると確信できます。それ。これまでのところ、彼らが失敗していると疑う理由はなかったので、より簡単な道をたどることができます.

于 2013-02-16T17:50:31.673 に答える