首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何PyTest,Mixer,Django,OneToOneField

如何PyTest,Mixer,Django,OneToOneField
EN

Stack Overflow用户
提问于 2020-02-05 12:34:38
回答 1查看 818关注 0票数 0

正如大多数Django教程所建议的那样,我通过AbstractUser创建了自己的用户模型,并创建了一个Profile-model,其中包含更多的细节,比如通过OneToOneField链接到User的bio。

现在我开始编写测试,我不知道如何从里面引用Profile模型。

test_models.py

代码语言:javascript
复制
import pytest
from mixer.backend.django import mixer

pytestmark = pytest.mark.django_db


class TestUsers:

    def test_user(self):
        obj = mixer.blend('player.User')

        assert obj.pk == 1, 'Should save one instance of a user'
        assert obj.Profile.bio is not None, 'There should be at least default bio'

给我一个“属性错误”:“用户”对象没有属性“配置文件”

models.py

代码语言:javascript
复制
class User(AbstractUser):
    pass


class Profile(models.Model):
    user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
    bio = models.CharField(max_length=130, default='No bio written yet.')

@receiver(post_save, sender=get_user_model())
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)


@receiver(post_save, sender=get_user_model())
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

如何引用应该通过models.py中的信号创建的配置文件进行测试?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-05 12:51:12

我找到了办法。我的新test_models.py文件是这样的:

代码语言:javascript
复制
import pytest
from mixer.backend.django import mixer
from player.models import Profile

pytestmark = pytest.mark.django_db


class TestUsers:

    def test_user(self):
        obj = mixer.blend('player.User')
        prof = Profile.objects.get(user_id=1)
        prof.bio = 'Testbio'
        prof.save()
        prof = Profile.objects.get(user_id=1)
        assert obj.pk == 1, 'Should save one instance of a user'
        assert prof.bio == 'Testbio'

我创建了一个用户,我从数据库中获取他的个人资料,我修改了bio并将其保存回数据库。我从数据库中获取修改后的版本,并检查修改后的bio是否在其中。

如果有一种更优雅的方式来做这件事,我很乐意读到。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60075966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档