16

Factory Boyを使用して、django アプリのテスト ファクトリを作成しています。私が問題を抱えているモデルは、django ユーザー認証モデル (django < 1.5 を使用) と OneToOne の関係を持つ非常に基本的なアカウント モデルです。

# 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

ただし、テストを実行すると、複数の User モデルが作成されているように見え、統合エラーが表示されます。

IntegrityError: column username is not unique

ドキュメントには、循環インポートを処理するときに for ループに注意することが記載されていますが、それがどうなっているのか、またどのように修正するのかはわかりません。ドキュメント

Factory Boy に精通している方が、この完全性エラーの原因について意見を述べたり、何らかの洞察を提供したりしていただければ幸いです。

4

2 に答える 2