首页 > 解决方案 > Pytest 和 Django,创建模块范围的固定装置的正确方法

问题描述

使用 django 测试数据库的 pytest 模块范围的固定装置让我们感到困惑。我们想要一个fixture,它在数据库中创建一个条目,每个测试模块一次。

这有效,但它非常笨重:

import pytest

@pytest.fixture(scope='module')
def site(django_db_setup, django_db_blocker):
    with django_db_blocker.unblock():
        address = models.Address.create(..)
        site = models.Site.create(address=address, ..)

    yield site

    with django_db_blocker.unblock():
        site.delete()
        address.delete()

我们注意到这django_db_setup是必需的,因为如果这个夹具是第一个调用的,则不会设置测试数据库,并且夹具将在非测试数据库中创建

对于具有多于一两个相关模型的复杂对象,夹具变得非常难看。

有一个更好的方法吗?

标签: pythondjangopytest

解决方案


推荐阅读