2017-12-19 2 views
0

내 user_profile/model.py에 대한 단위 테스트를 실행할 때 오류가 발생합니다. "1"을 (를) 할당 할 수 없습니다 : "User.group"은 "브랜드"인스턴스 여야합니다. "단위 테스트를위한 Django 팩토리 : "1"을 할당 할 수 없습니다 : "User.group"은 "Brand"인스턴스 여야합니다. "

은 내가 UserFactory()의 인스턴스를 생성하고있을 때 내 단위 테스트 (factories.py) 내 공장에서, 내가 제대로 그룹을 할당하고 있지 않다, 때문에이 오류가 믿습니다. I 그룹브랜드 클래스/공장에 매핑해야합니다 것은 그러나 나는이 작업을 수행하는 방법을 잘 모르겠어요 ..이

user_profile/model.py :

class Brand(models.Model): 

    name = models.CharField(max_length=20) 

    def __unicode__(self): 
     return self.name 


class User(AbstractBaseUser, PermissionsMixin): 

    username = models.CharField(
     'username', 
     max_length=50, 
     unique=True, 
     db_index=True 
    ) 
    email = models.EmailField('email address', unique=True) 
    group = models.ForeignKey(Brand, null=True, blank=True) 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 
    is_staff = models.BooleanField(default=False) 
    is_approved = models.BooleanField(default=True) 

와의

user_profile/test/factories.py :

from user_profile.models import User, Brand 

class UserFactory(factory.django.DjangoModelFactory): 

    class Meta: 

     model = User 
     django_get_or_create = (
      'username', 
      'email', 
      'password', 
      'is_approved', 
      'is_active', 
      'is_staff', 
      'is_admin', 
      'group' 
     ) 


class BrandFactory(factory.django.DjangoModelFactory): 

    class Meta: 

     model = Brand 
     django_get_or_create = ('name',) 

BrandFactory(name='BRAND1') 
BrandFactory(name='BRAND2') 
BrandFactory(name='BRAND3') 
BrandFactory(name='BRAND4') 


UserFactory(
    username='[email protected]', 
    email='[email protected]', 
    password=12345, 
    is_approved=True, 
    is_active=True, 
    is_staff=True, 
    is_admin=True, 
    group="1" <--- HOW DO I MAP THIS TO THE 'BRAND1' FACTORY/CLASS?! 
) 

UserFactory(
    username='[email protected]', 
    email='[email protected]', 
    password=12345, 
    is_approved=True, 
    is_active=True, 
    is_staff=True, 
    is_admin=True, 
    group="2" <--- HOW DO I MAP THIS TO THE 'BRAND2' FACTORY/CLASS?! 
) 

답변

2

에 BrandFactory의 반환 값을 지정해야합니다. 예를 들어

b1 = BrandFactory(name='BRAND1') 
b2 = BrandFactory(name='BRAND2') 

한 다음 당신은 당신의 생성자에서 모델 인스턴스에 대한 참조를 사용

UserFactory(
    username='[email protected]', 
    email='[email protected]', 
    password=12345, 
    is_approved=True, 
    is_active=True, 
    is_staff=True, 
    is_admin=True, 
    group=b1 
) 

UserFactory(
    username='[email protected]', 
    email='[email protected]', 
    password=12345, 
    is_approved=True, 
    is_active=True, 
    is_staff=True, 
    is_admin=True, 
    group=b2 
) 
관련 문제