Как внутри pytest django, прописать атрибут от викстуры содержащей baker.make?
ДЕнь добрый Изучаю pytest в работе с django для тестирования REST Через гуглеж и мануалы не могу найти ответы на вопросы.
Цель теста - выполнить метов GET
Использую random
для генератора контролируемого контента в db.
Его взял из пекарни и с ним проблем нету.
Если тест в представленном коде , все работает.
```
@pytest.mark.django_db()
def test_filtr_by_name(
name_stude : list = get_name_random,
title : list = get_courses_random,
api_client = api_client,
cours_fixture = cours_fixture,
studen_fixture = studen_fixture,
):
"""
TODO: Checking filtering by name
:param name_stude: this's list the names-students of function random
:param title: It's course name of function random
:param api_client: id's client line of db
:return:
"""
# Arrange
baker.make(
"students.Student",
name=name_stude,
make_m2m=True
)
baker.make(
"students.Course",
name=title,
)
# Act
api_client = APIClient()
for r in Student.objects.all(): params={'name' : '%s' % (r,)}
response_page = api_client.get('/courses/', data=params, format='json')
# Accert
assert response_page.status_code == 200
data = response_page.json()
assert len(data) != 0
assert data
```
Но baker.make
and ApiClient
пытаюсь распихать по @pytest.fixture
используя scope=session
или packege
или вовсе без scope
@pytest.fixture(scope="session")
def studen_fixture():
return baker.make(
"students.Student",
name=name_stude, # рандом подает имена
make_m2m=True
)
и
@pytest.fixture(
scope='module'
) # the pytest.fixture creates attribute from repeatedly code
def api_client():
return APIClient()
При запуске теста с APIClient через фикстуру, в строке api_client.get('/courses/', data=params, format='json')
получаю ошибку 'function' object has no attribute 'get'
Если baker.make
вызвать в отдельной строке studen_fixture()
получаю ошибку
called directly. Fixtures are not meant to be called directly,
but are created automatically when test functions request them as parameters
Как через фикстуры прописать клиента и пекарню?
Заранее спасибо за подсказку.