Есть ли способ сделать имитацию часового пояса для Selenium-теста в Django?
В моем приведенном ниже тесте selenium я пытаюсь протестировать модель Analytics. Я использую макет экземпляра модели Analytics из class AnalyticsFactory.
Когда я запускаю этот тест, все работает нормально, за исключением ошибки для поля timestamp в модели Analytics. Примечание: для этого я использую timezone.now().
Похоже, что время, когда я запускаю тест и когда время присваивается фабрике Analytics, немного отличается. Например, вот какую ошибку я получаю:
AssertionError: datetime.datetime(2022, 4, 8, 13, 3, 28, 153988, tzinfo=<UTC>) != datetime.datetime(2022, 4, 8, 13, 3, 28, 48016, tzinfo=<UTC>)
В приведенной выше ошибке 153988 и 48016 отличаются
Есть ли способ установить "поддельный" объект часового пояса вместо использования timezone.now()? Поскольку кажется, что 'now' настолько точен, что я не могу заставить это работать
test_models.py:
from django.utils import timezone
from django.test import TestCase
from myapp.tests.factories import UserFactory, AnalyticsFactory
from myapp.models import Analytics
class MyTestCase(TestCase):
def setUp(self):
self.admin = UserFactory(
username='first.last@gmail.com',
email='first.last@gmail.com',
password=12345
)
self.a1 = AnalyticsFactory(
user=self.admin,
timestamp=timezone.now(),
views=10
)
def test_analytics(self):
a = Analytics.objects.get(id=6)
self.assertEqual(a.views, 10)
self.assertEqual(a.user, self.admin)
self.assertEqual(a.timestamp, self.a1.timestamp) <--- not working
self.assertEqual(response.status_code, 200)
factories.py:
import factory
from myapp.models import Analytics
from user_profile.models import User
import mock
class UserFactory(factory.django.DjangoModelFactory):
class Meta:
model = User
django_get_or_create = (
'username',
'email',
'password'
)
class AnalyticsFactory(factory.django.DjangoModelFactory):
class Meta:
model = Analytics
django_get_or_create = (
'timestamp',
'views',
)
user = factory.SubFactory(UserFactory)
models.py:
from django.db import models
from django.utils import timezone
from user_profile.models import User
class Analytics(models.Model):
user = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
timestamp = models.DateTimeField(default=timezone.now, blank=True)
views = models.IntegerField(default=1)