У меня есть веб-приложение, которое я тестирую. Я пытаюсь протестировать сериализаторы drf, но сериализаторы меняют формат datetime, поэтому идентичные даты, отформатированные по-разному, не проходят тест, потому что они не идентичны.
Я пытался отформатировать сериализатор timeDateField, но все используемые им форматы strftime заполнены нулями, а мой тестовый атрибут Users-last-login дает дату без заполнения нулями. Я думаю, что решение может быть решено так, как выбранный ответ описывает здесь , но это кажется немного отрывочным, и в идеале я, как человек, которому придется поддерживать этот код, хочу более чистый или более питонический раствор.
Вот тест:
class UserTest(TestCase):
def setup(self):
last_login = datetime.datetime(2000, 1, 1, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
date_joined = datetime.datetime(2019, 2, 2, hour=2, minute=2, second=2, microsecond=2, tzinfo=None)
birthdate = timezone.now().date()
renewal = timezone.now().date()
return User.objects.create(username='test_user', first_name='test_first', last_name='test_last',
email='test_mail', last_login=last_login, date_joined=date_joined,
birthdate=birthdate, gender='U', renewal=renewal)
def test_user_serializer(self):
self.u = self.setup()
serializer = UserSerializer(self.u, many=False)
data = serializer.data
.....
# tests for serialized attributes
self.assertEquals((data['last_login']), self.u.last_login) # FAILING THE TEST
Вот UserSerializer:
class UserSerializer(serializers.ModelSerializer):
last_login = serializers.DateTimeField
date_joined = serializers.DateTimeField
birthdate = serializers.DateField
renewal = serializers.DateField
class Meta:
model = User
fields = ('__all__')
Вот ошибка, которую я получаю:
self.assertEquals(data['last_login'], self.u.last_login)
AssertionError: '2000-01-01T00:00:00Z' != datetime.datetime(2000, 1, 1, 0, 0)
В модели атрибут last_login представляет собой dateTimeField.
Стоит ли пытаться изменить форматы одного из тестируемых элементов или есть способ написать тест, который сравнивает даты независимо от формата?
Пожалуйста, сообщите. Спасибо.