この記事はアクトインディ Advent Calendar 2016 19日目になります。 どうぞよろしくお願いします。
今回はtimecopについて説明します。
timecopとは
過去の時間、未来の時間の日付で動作するようになります。
なお、現実では戻れないので、そこは注意が必要です。
簡単な使い方
簡単な使い方です。
Timecop.travel(2017, 1, 1) do
Time.new
end
=> 2017-01-01 09:00:00 +0900
メソッドのブロック内の時間が未来になっているかと思います。
これを利用して、テストでは過去の時間、未来の時間にすることで特定のタイミングでのテストが書けることができます。
ちょっとした使い方
用途としては、テストで使うのが一般的だと思います。
ただ、特定のタイミングでのバッチ処理の結果が欲しい場合があります。
その中身のメソッド内で下記のようなコードがあったとします。
class Batch
def self.update_analyses
end_on = Date.today
start_on = end_on - 3
...
...
end
end
こういうメソッドの過去のデータが消えていて、過去のデータが欲しい場合にtimecopが役立ちます。
Timecop.travel(2016, 4, 1) do
Batch.update_analyses
end
過去のデータが取れます。
以上です。
本当に時間が戻れればいいんですけどね。