Я использую Factory Boy для создания тестовых фабрик для моего приложения django. Модель, с которой у меня возникла проблема, представляет собой очень простую модель учетной записи, которая имеет отношение OneToOne к модели аутентификации пользователя django (с использованием 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)
Поэтому я ожидаю, что фабричный мальчик создаст связанную UserFactory всякий раз, когда вызывается AccountFactory:
# 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, может ответить или дать некоторое представление о том, что может быть причиной этой ошибки целостности, мы будем очень признательны!
post_save
. - person alecxe   schedule 15.07.2013