timecopのちょっとした使い方

区分
advent-calender
報告者

この記事はアクトインディ Advent Calendar 2016 19日目になります。 どうぞよろしくお願いします。

今回はtimecopについて説明します。

timecopとは

timecopはRubyのgemです。

過去の時間、未来の時間の日付で動作するようになります。

なお、現実では戻れないので、そこは注意が必要です。

簡単な使い方

簡単な使い方です。

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

過去のデータが取れます。

以上です。

本当に時間が戻れればいいんですけどね。

トップページに戻る

技師部隊からの
お知らせ

【求人】エンジニア募集しています。

本頁の来客数
八十七万千百七十六名以上(計測停止中)

メンバー一覧

アクトインディ技師部隊員名簿

アクトインディ技師部元隊員

アクトインディへ

カテゴリー

アクトインディ

aaaa