Я пытаюсь высмеять функцию now() Django, чтобы подменять время, используемое в моем приложении. Я могу легко высмеять функцию 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, как сейчас() на протяжении всего приложения? Если да, то что я делаю неправильно? Любые другие предложения?