簡體   English   中英

Django工廠進行單元測試:“無法分配” 1”:“ User.group”必須是“ Brand”實例。

[英]Django factories for unit test: “Cannot assign ”'1'“: ”User.group“ must be a ”Brand“ instance.”

當我為user_profile / model.py運行單元測試時出現錯誤: “無法分配“'1'”:“ User.group”必須是“ Brand”實例。”

我相信這個錯誤是因為,在我用於單元測試的factories.py (factory.py)中,當我創建UserFactory()的實例時,我沒有正確分配 我的東西應該映射到Brand類/工廠,但是我不確定該怎么做。

這是我的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='myuser1@gmail.com',
    email='myuser1@gmail.com',
    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='myuser2@gmail.com',
    email='myuser2@gmail.com',
    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?!
)

您必須 BrandFactory的返回值分配給某些對象。 例如

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

然后在構造函數中使用對模型實例的引用

UserFactory(
    username='myuser1@gmail.com',
    email='myuser1@gmail.com',
    password=12345,
    is_approved=True,
    is_active=True,
    is_staff=True,
    is_admin=True,
    group=b1
)

UserFactory(
    username='myuser2@gmail.com',
    email='myuser12@gmail.com',
    password=12345,
    is_approved=True,
    is_active=True,
    is_staff=True,
    is_admin=True,
    group=b2
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM