私のアプリケーションで使用されている時間を偽装するために、Djangoのnow()関数をモックしようとしています。私は簡単に私のテストファイル内のnow()関数をモックすることができますが、モックの置換は再帰的に自分のアプリケーションの関数に浸透しているようには見えません。私が使っているコードは次のとおりです:Djangoのすべてのアプリケーション関数を模擬する方法
# file - tests.py:
import datetime
import pytz
import mock
from django.test import TestCase
# this is the fake time I am using
TESTING_DJNOW = pytz.timezone('US/Central').localize(datetime.datetime(2016, 6, 14, 8, 0))
# This is the function that replaces django.utils.timezone.now()
def mocked_djnow():
return TESTING_DJNOW
@mock.patch('django.utils.timezone.now', side_effect=mocked_djnow)
class ViewsTestCase(TestCase):
fixtures = ['users.json', 'views_data.json'] # our initial test data
def setUp(self):
self.client = Client()
self.client.login(username='fred', password='secret')
def test_view(self, *args):
from django.utils.timezone import now
tm = now() # returns datetime.datetime(2016, 6, 14, 8, 0,
# tzinfo=<DstTzInfo 'US/Central' CDT-1 day, 19:00:00 DST>)
resp = self.client.get(reverse('myapp:viewfunc1'))
# file - myapp.views.py:
from django.utils.timezone import localtime, now
@login_required
def viewfunc1(request):
# returns datetime.datetime(2016, 7, 16, 1, 11, 6, 964624, tzinfo=<UTC>)
tm = now() # returns current datetime
アプリケーション全体で今のようなDjangoの機能をパッチすることは可能ですか?もしそうなら、私は間違って何をしていますか?その他の提案はありますか?