Pytest-django - тестирование создания и передачи требуемого объекта User

Прошу прощения, если на этот вопрос уже был дан ответ в другом месте. Я не могу найти ответ, который я могу приспособить к моей ситуации.

Я новичок в django, поэтому я чувствую, что проблема в том, что я не могу понять предположительно основную концепцию...

Используя DRF и pytest-django, я стараюсь быть усердным и писать тесты по ходу дела, пока ручное тестирование не стало слишком трудоемким. Я вижу, как это быстро превращается в снежный ком.

Проблема, с которой я столкнулся, заключается в том, что когда я пытаюсь протестировать создание каталога, я не могу заставить его передать экземпляр User в обязательное поле 'created_by'. Логика работает нормально, когда я тестирую вручную, но написание самого теста вызывает у меня головную боль.

Заранее большое спасибо!

Ошибка: TypeError: Cannot encode None for key 'created_by' as POST data. Вы хотели передать пустую строку или опустить значение?

Код предоставлен.

Я думаю, что у вас может быть проблема с пользователем, которого вы используете для проведения теста,

когда вы вызываете authenticate, он возвращает клиента, что не то же самое, что пользователь.

затем запустите аутентификацию и войдите в систему как обычный пользователь. Попробуйте сделать другое приспособление, которое сначала создает пользователя, аутентифицируется с этим пользователем, чтобы вернуть клиента, а затем публикует созданного пользователя в create_catalogue

from django.conf import settings

@pytest.fixture
def create_user() -> User:
    return settings.AUTH_USER_MODEL.objects.create(
        username="Test User", password="Test Password", email="testuser@example.com"
    )

@pytest.fixture
def authenticate(api_client):
    def do_authenticate(create_user):
        return api_client.force_authenticate(create_user)
    return do_authenticate

class TestCreateCatalogue:
    def test_if_admin_can_create_catalogue_returns_201(self, authenticate, create_user  create_catalogue):
        
        user = authenticate(create_user)
        response = create_catalogue(
            {'title': 'a', 'description': 'a', 'state': 'DRAFT','created_by':create_user})

        assert response.status_code == status.HTTP_201_CREATED
Вернуться на верх