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

  • 大坂昌彦

    大坂昌彦 @masahiko_osaka

    ytyng

    今日はヤマハへ遊びに行って、新製品を試奏しました!!その模様をiPhoneで撮ったので見て下さい!! https://t.co/EQ9LBtK5a9 https://t.co/OkGiLYC24l
    3 weeks, 1 day ago

  • ytyng

    ytyng @ytyng

    なおってた
    1 month, 1 week ago

  • ytyng

    ytyng @ytyng

    vuetify って2になって、グリッドのタグ名がBootstrapと同じになったのね。v-flex と書かなくてよくなってた。良い。
    1 month, 1 week ago

Recent Posts

Archive

2020
2019
2018
2017
2016
2015
2014
2013
2012
2011

Categories

Authors

Feeds

RSS / Atom