首页 > 解决方案 > Pytest-django 事务未物理提交到数据库

问题描述

有一个conftest.py文件允许我使用我的自定义事务夹具fake_user

@pytest.mark.django_db(transaction=True)
@pytest.fixture
def fake_user():
    user = getattr(fake_user, 'user', None)
    if user is None:
        user_data = dict(
            id=1,
            is_superuser=False,
            is_staff=False,
            email='foo@barmail.com', 
            username='foobaruser',
            password='passwordmaster',
            date_joined=timezone.now()
        )
        user = User.objects.create(
            **user_data
        )
        user.save()
        # pdb.set_trace()
        fake_user.user = user
    yield user

不知何故,如果我用 pdb.set_trace() 调试上面的代码,我得到User.objects.all()等于<QuerySet [<User: foobaruser>]>. 但是没有任何真正的测试数据库记录。因此,当在另一个高级函数中查询“用户”对象时,例如“GraphQL”或 REST 调用,我得到“用户”表绝对是空的。如何启用真正的测试数据库事务?为什么 pytest 不允许任何物理记录或阻止它们被插入的原因?

标签: pythondjangopytestpytest-django

解决方案


Pytest 在运行之间刷新测试数据库;添加--reuse-db到您的选项以保留数据。


推荐阅读