Я пишу тесты для приложения Django, и один из моих тестов проваливается со странной ошибкой, при которой сравнение assertEqual
не выполняется, даже если объекты в обоих наборах запросов совпадают.
Тест довольнобольшой, поэтому я написал небольшой тест для воссоздания ошибки:
class StrangeBehaviorTest(TestCase):
def test_init(self):
purchase = ArrangementPurchaseFactory()
self.assertTrue(purchase)
self.assertTrue(purchase.arrangement_period)
self.assertEqual(ArrangementPurchase.objects.count(), 1)
fetched = ArrangementPurchase.objects.filter(
id=1)
self.assertEqual(fetched.first().id, purchase.id)
self.assertEqual(fetched.first(), purchase)
self.assertEqual(fetched, ArrangementPurchase.objects.filter(
id=1
))
Когда я запускаю этот тест, последнее утверждение не выполняется со следующей ошибкой:
AssertionError: <QuerySet [<ArrangementPurchase: 1 : user_0 - Profound bandwidth-monitored pricing structure (vanaf 2019-04-24)>]> != <QuerySet [<ArrangementPurchase: 1 : user_0 - Profound bandwidth-monitored pricing structure (vanaf 2019-04-24)>]>
I 'мы убедились, что мой ArrangementPurchaseFactory
является подклассом DjangoModelFactory
(как видно ниже)
class ArrangementPurchaseFactory(factory.django.DjangoModelFactory):
class Meta:
model = arrangement_models.ArrangementPurchase
user = factory.SubFactory(UserFactory)
arrangement_period = factory.SubFactory(ArrangementPeriodFactory)
purchase_date = factory.LazyFunction(
lambda: timezone.now() - datetime.timedelta(days=10)
)
expire_date = factory.LazyFunction(
lambda: timezone.now() + datetime.timedelta(days=30)
)
tenant_demo_purchase = False
price_paid = factory.LazyFunction(lambda: Decimal(0))
linked_order_id = factory.Faker('sha1')
rabo_purchase_pending = False
Насколько я могу судить, объект в обоих наборах запросов существует в базе данных (объект имеет идентификаторзначение), а значение pk запроса fetched
соответствует существующему purchase.id
Так почему же тест не пройден?Кто-нибудь знает, чего мне не хватает?