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

    俺もスタバアプリにログインできないよ
    7 months, 2 weeks ago

  • 安藤拓郎 Takuro Ando

    安藤拓郎 Takuro Ando @takuroando

    ytyng

    これまでいろんなグッズを作ってきたけど、今回は「お米」と聞いて買うしかないなと。今夜の夕食はコシヒカリ!箸もセットだし^^ https://t.co/01ucQx9qtw #腰乃展 #マンガ展 https://t.co/4VL2vOe0Og
    8 months ago

  • ytyng

    ytyng @ytyng

    講談社さんとやった全部入り電子書籍セットがギネスブックに登録されたよー https://t.co/rbkd3IYub0
    8 months ago