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')