Django tests: клиент запрашивает пустую строку вместо объекта WSGIRequest

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

Я хочу написать тесты, специфичные для приложения этой формы:

from django.test import TestCase
from django.urls import reverse

class SignUpTest(TestCase):

    def test_my_signup_get2(self):
        response = self.client.get(reverse('signup'))
        self.assertEqual(response.status_code, 200)

Когда я запускаю такие тесты из папки моего приложения, генерируемый объект запроса представляет собой пустую строку, что приводит к провалу теста. В логике проекта происходит обращение к объекту request.user, который не существует в строке.

Когда я запускаю точно такие же тесты из папки проекта, где используется это приложение, объект запроса является объектом WSGIRequest и тест проходит успешно, так как request.user присутствует.

Как сделать так, чтобы запрос всегда был WSGIRequest?

Юнит-тесты всегда будут запускаться из корня вашего проекта, будь то метод Django manage.py или pytest. Пожалуйста, смотрите https://docs.djangoproject.com/en/4.0/topics/testing/overview/#running-tests-1. Вы можете гибко выбирать, какой набор тестов приложения или часть набора тестов должен быть выполнен.

Это была простая проблема в settings.py. Я не добавил одинаковые контекстные процессоры в приложение, которое я тестировал, и в проект, который использовал это приложение: context_processors.request отсутствовал.

TEMPLATES = [
{
    "BACKEND": "django.template.backends.django.DjangoTemplates",
    "OPTIONS": {
        "context_processors": [
            # Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this
            # list if you haven't customized them:
            # ...
            "django.template.context_processors.request", # <= this was missing
            # ... 
        ],
    },
}

]

Вернуться на верх