freezegun を Django のテストで使う時、USE_TZ=True 環境下で1日後 にする方法

(Comments)

freezegun は、python のライブラリ。

datetime での現在時刻取得をフックし、「翌日を想定したテスト」などができるようになる。

Django のテストで「翌日」を想定したテストをしたい場合、

今日のログインボーナス()
with freezegun.freeze_time(datetime.timedelta(days=1)):
    明日のログインボーナス()

とすると、JSTタイムゾーンで開発している際に9:00 前にテストが失敗するなどの不具合が出る可能性がある。

from django.utils import timezone

今日のログインボーナス()
with freezegun.freeze_time(timezone.now() + datetime.timedelta(days=1)):
    明日のログインボーナス()

 としても同様。

正しく翌日判定させるには

import datetime

今日のログインボーナス()
with freezegun.freeze_time(datetime.datetime.now() + datetime.timedelta(days=1)):
    明日のログインボーナス()

もしくは

import datetime

今日のログインボーナス()
with freezegun.freeze_time(datetime.timedelta(days=1), tz_offset=9):
    明日のログインボーナス()
import datetime
from django.utils import timezone
tz = timezone.get_current_timezone()


今日のログインボーナス()
with freezegun.freeze_time(datetime.timedelta(days=1), tz_offset=tz._utcoffset):
    明日のログインボーナス()

のようにする必要がある

Currently unrated

Comments

Recent Tweets

  • ytyng

    ytyng @ytyng

    在宅で仕事してるので古い曲をけっこう聞いてる。久々にコーガニズムオーケストラ聞いたらめっちゃかっこいい。昔対バンして間近で見て強烈に心を持ってかれたことを思い出した。新潟古町のJunkBox。またミクスチャーやりたいわ。
    1 week, 2 days ago

  • ytyng

    ytyng @ytyng

    slack 503
    1 week, 6 days ago

  • ytyng

    ytyng @ytyng

    11:40 頃解消された。
    1 month, 1 week ago