Django单元测试中“model_bakery”生成的意外模型
我用了相当多的Django单元测试中“model_bakery”生成的意外模型,django,unit-testing,model-mommy,Django,Unit Testing,Model Mommy,我用了相当多的model\u面包店(在那之前,model\u妈咪),所以这个bug让我觉得我在吃疯狂的药丸 from model_bakery import baker # BaseTestCase inherits from django.test.TestCase # it creates a tenant object assigned to self.tenant in BaseTestCase.setUp class TestSchemas(BaseTestCase): de
model\u面包店
(在那之前,model\u妈咪
),所以这个bug让我觉得我在吃疯狂的药丸
from model_bakery import baker
# BaseTestCase inherits from django.test.TestCase
# it creates a tenant object assigned to self.tenant in BaseTestCase.setUp
class TestSchemas(BaseTestCase):
def setUp(self):
super().setUp()
self.assertEqual(Tenant.objects.count(), 1, "This one passes")
self.assertTrue(
Tenant.objects.filter(pk=self.tenant.pk).exists,
"The only tenant I expect is here, persisted, and correct."
)
self.schema = baker.make(
"Schema",
tenant=self.tenant,
)
self.assertEqual(self.schema.tenant, self.tenant, "This also does not fail...")
# This is the failing assert
self.assertEqual(
Tenant.objects.count(), 1, "This case fails. I _expect_ no additional Tenant objects to have been created."
)
如断言消息所示,setUp
方法以一个Tenant
对象开始我的预期。我使用baker
创建一个Schema
。我希望模式使用现有的租户
,但它似乎正在创建第二个租户,正如最后的断言所示AssertionError:2!=1
我已经把这件事简化到最低限度,但我很难理解到底发生了什么。模型上没有任何被重写的方法,
BaseTestCase
没有做任何特殊的事情。。。下一步我可以尝试什么?我自己无法复制这一个(成功地通过了失败的断言),可能您已经在github上共享了项目?
from django.db import models
class Tenant(models.Model):
tenant_xid = models.BigIntegerField("Tenant ID", primary_key=True)
class Schema(models.Model):
form_schema_xid = models.BigIntegerField("schema ID", primary_key=True)
tenant = models.ForeignKey(
Tenant, models.CASCADE, db_column="tenant_xid", related_name="schemas"
)