でrspec expect message docsによると、(...)受信を期待しますしかし、時間の範囲が実際に渡されていることを確認したいのであれば、どうすればいいですか?RSpecのは、私たちは次のようなコードを使用する場合(TIME_RANGE)
def in_date_range(range)
activities.by_created_at(range)
end
などのテスト:これはTypeError: can't iterate from Time
で失敗
it 'passes correct arguments' do
range = Time.new(0)..(Time.new(0) + 1.hour)
expect(activities).to receive(:by_created_at).with(range)
in_date_range(range)
end
例えば
、私はこの方法は、(それが簡略化されています)正しい引数を指定して適切なメッセージを送ることをテストしたかったです
rspecが私の時間範囲で#===
に電話をかけようとしていることが原因であると疑われています。
私の時間範囲が実際に渡す範囲であることを確認する方法はありますか?
私は実際に重なり合う時間を探しているのではなく、範囲が同じである:同じ開始点と終了点を持っています。
私たちがこれを行う方法の1つはカスタムマッチャーを書くことですが、それは珍しいルートのようです。
EDIT
別の可能な解決策は、2つの断片にメソッドを分割することである。
def compute_range(time_in)
(computations)
time1..time2
end
def in_date_range(time_in)
range = compute_range(time_in)
activities.by_created_at(range)
end
そして私はそれが適切な範囲を返す計算方法をテストすることができ、より大きな方法I正しい入力に合格したかどうかをテストし、小さいメソッドの出力を最初のメソッドから受け取り、もう一方のメソッドに渡して、メッセージ内の範囲のチェックの混乱を避けることができます。
これは完全には答えていません - rspec receive(:message)を使って「特定の範囲を受信する」ことを確認する方法はありますが、今は十分です。
ああ面白いの後に完全に発生した後、
Aは完全に起こります!なぜ私はそれをチェックしなかったのかわかりません。それはいくつかの光を放つ。質問はTimeインスタンスを指定するために編集されましたが、時間を反復可能にすることの妥当性を理解していません –