Django тестирование представления возвращает 302 вместо 200

Я пишу несколько тестов в проекте Django. Например, я хочу протестировать представление index в одном приложении моего Django проекта. Но я не уверен, что приведенный ниже код теста корректен, событие, если тест прошел.

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

Итак, в SetUp я сначала создал тестового пользователя и вошел в систему.

Наконец, я проверяю, что могу получить представление индекса, тестируя возврат status_code.

Но если я опущу follow=True, он возвращает 302 и тест не проходит. Правилен ли мой тестовый код?

class IndexPageTestCase(TestCase):

    def setUp(self):
        self.client = Client()
        self.user = User.objects.create_superuser(username='test', password='test', email='test@test.fr')
        self.client.login(username='test', password='test')

    def test_index_page(self):
        response = self.client.get(reverse('ecrf:index'), follow=True)
        self.assertEqual(response.status_code, 200)

Архитектура проекта Django

- core
   - urls.py
- ecrf
   - urls.py
   - views.py

core/urls.py

urlpatterns = [
    path('ecrf/', include('ecrf.urls')),
]

ecrf/urls.py

urlpatterns = [
    path("", views.index, name="index"),
]

ecrf/views.py

@login_required
def index(request):
    ...
    return render(request, "ecrf/index.html", context)

Я решил свою проблему.

Я не знаю почему, но при создании пользователя методом create_user, пароль не хешируется должным образом, что подтверждается методом check_password('test',self.user.password), который возвращает false. Но если я создаю пользователя методом create и устанавливаю_пароль "вручную", то все работает

пароль правильно хэширован для теста

cls.user = User.objects.create(username='test', email='test@test.fr')
cls.user.set_password('test')
cls.user.save()

пароль неправильно хэширован для теста

cls.user = User.objects.create_user(username='test', password='test', email='test@test.fr') 

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