【发布时间】:2021-08-25 08:35:47
【问题描述】:
有一个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 不允许任何物理记录或者是什么阻止它们被插入?
【问题讨论】:
-
让
transaction=True在每次测试之间刷新数据库,这可能是清除创建的用户,你应该删除它pytest-django.readthedocs.io/en/latest/… -
IDK 怎么做,但谢谢,这行得通——我之前使用了没有
transaction=True的所有测试,但现在它以正确的方式完成了 -
它仍然无法在灯具内工作。仅当我在最终的 pytest 函数中定义并保存用户时才有效
标签: python django pytest pytest-django