我希望pytest-django在创建测试数据库时安装Postgres扩展。我一直在使用conftest.py试图让它发挥作用,但我已经卡住了。
我的conftest.py位于我项目的顶层(与manage.py相同的目录),并包含:
from django.db import connection
import pytest_django
@pytest.fixture(scope='session')
def django_db_setup(*args, **kwargs):
pytest_django.fixtures.django_db_setup(*args, **kwargs)
cursor = connection.cursor()
cursor.execute("create extension pg_trgm")
但是当我运行它时,我得到了:
_pytest.vendored_packages.pluggy.PluginValidationError: unknown hook 'pytest_django' in plugin <module 'conftest' from '/path/to/my/conftest.py'>
答案 0 :(得分:4)
您可以使用pre_migrate
信号。例如:
from django.db.models.signals import pre_migrate
from django.apps import apps
def app_pre_migration(sender, app_config, **kwargs):
cur = connection.cursor()
cur.execute('CREATE EXTENSION IF NOT EXISTS pg_trgm;')
pre_migrate.connect(app_pre_migration, sender=apps.get_app_config('app'))
我希望这可以帮到你。
答案 1 :(得分:0)
我一直在尝试完成同样的事情,并使其正常工作(在conftest.py
中):
@pytest.fixture(scope="session")
def django_db_setup(django_db_setup, django_db_blocker):
"""Test session DB setup."""
with django_db_blocker.unblock():
with connection.cursor() as cursor:
cursor.execute("CREATE EXTENSION IF NOT EXISTS citext;")
此处的关键是您必须使用与标准pytest-django
灯具相同的名称来命名自定义灯具,而且还必须包含默认灯具作为参数。这是运行标准灯具的方法,而不是导入和调用它。我还发现除非我运行django_db_blocker.unblock()
,否则此操作将失败。