Есть ли способ сделать имитацию часового пояса для 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)
Вернуться на верх