Pytest - Доступ к БД изнутри метода setup_class
Мне нужно иметь доступ при создании изнутри метода setup_class
. Например:
@pytest.mark.django_db
class TestPerson:
@classmethod
def setup_class(cls):
Person.objects.create(first_name='John', last_name='Snow') # here error happens
def setup_method(self):
Person.objects.create(first_name='John', last_name='Snow')
def test_1(self):
assert True
Произошел сбой с ошибкой:
RuntimeError: Доступ к базе данных не разрешен, используйте метку "django_db", или фиксы "db" или "transactional_db", чтобы разрешить его.
Для метода setup_method
он работает нормально. Я провел некоторое исследование в исходном коде pytest
и нашел место, где обычный метод класса setup_method
становится фикстурой pytest.
Поэтому я попытался реализовать тот же подход:
def make_setup_class_as_fixture(klass):
old_setup_class = klass.setup_class
@pytest.fixture(scope='class', autouse=True)
def new_setup_class(cls):
old_setup_class(cls)
klass.setup_class = new_setup_class
return klass
@make_setup_class_as_fixture
@pytest.mark.django_db
class TestPerson:
def setup_class(cls):
Person.objects.create(first_name='John', last_name='Snow')
def setup_method(self):
Person.objects.create(first_name='John', last_name='Snow')
def test_1(self):
assert True
Но снова сбой с той же ошибкой.
Как это исправить?