我正在使用Factory Boy为我的 django 应用程序创建测试工厂。我遇到问题的模型是一个非常基本的帐户模型,它与 django 用户身份验证模型具有 OneToOne 关系(使用 django < 1.5):
# models.py
from django.contrib.auth.models import User
from django.db import models
class Account(models.Model):
user = models.OneToOneField(User)
currency = models.CharField(max_length=3, default='USD')
balance = models.CharField(max_length="5", default='0.00')
这是我的工厂:
# factories.py
from django.db.models.signals import post_save
from django.contrib.auth.models import User
import factory
from models import Account
class AccountFactory(factory.django.DjangoModelFactory):
FACTORY_FOR = Account
user = factory.SubFactory('app.factories.UserFactory')
currency = 'USD'
balance = '50.00'
class UserFactory(factory.django.DjangoModelFactory):
FACTORY_FOR = User
username = 'bob'
account = factory.RelatedFactory(AccountFactory)
所以我希望工厂男孩在调用 AccountFactory 时创建一个相关的 UserFactory:
# tests.py
from django.test import TestCase
from factories import AccountFactory
class AccountTest(TestCase):
def setUp(self):
self.factory = AccountFactory()
def test_factory_boy(self):
print self.factory.id
但是,在运行测试时,似乎正在创建多个用户模型,并且我看到了一个完整性错误:
IntegrityError: column username is not unique
文档确实提到在处理循环导入时要注意循环,但我不确定这是否发生了,也不知道我将如何解决它。文档
如果任何熟悉 Factory Boy 的人都可以插话或提供一些关于可能导致此完整性错误的原因的见解,我们将不胜感激!