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