Ich versuche, Djangos now() - Funktion zu verspotten, um die in meiner Anwendung verwendete Zeit zu verfälschen. Ich kann die Funktion now() in meiner Testdatei leicht verspotten, aber die Scheinwiederholung scheint nicht rekursiv in meine Anwendungsfunktionen einzudringen. Hier ist der Code, ich bin mit:Wie man Djangos jetzt Funktion in allen Anwendungsfunktionen vortäuscht
# 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
Ist es möglich, Django Funktionen wie jetzt() in der gesamten Anwendung flicken? Wenn ja, was mache ich falsch? Irgendwelche anderen Vorschläge?