Django тестирует возврат перенаправления входа 302, даже если пользователь вошел в систему

Я очень запутался в том, как тестировать страницы, требующие входа в систему. Я продолжаю получать 302 вместо 200 в своем ответе, и при проверке ответа в pdb я определенно перенаправляю на страницу входа. Я использую промежуточное программное обеспечение для входа вместо декоратора, если это актуально.

class SimplePageLoadsTestCase(TestCase):

    def setUp(self):
        self.client = Client()
        self.user = User.objects.create_user('test_user')
        self.client.login(username='test_user', password='test_user')

    def test_login(self):
        self.assertTrue(self.user.is_authenticated())

    def test_index(self):
        self.client.login(username='test_user', password='test_user')
        response = self.client.get(reverse('index'))
        self.assertEqual(response.status_code, 200)

test_login тест проходит. Я не был уверен, нужно ли мне повторно входить в систему пользователя для теста (я думаю, нет, так как я не нуждался в test_login, но я пробовал оба способа с одинаковым результатом. Я бросил несколько печатных заявлений в моем представлении, и они не выводят, так что я знаю, что я не обращаюсь к представлению вообще, как я подозревал.

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

РЕДАКТИРОВАТЬ: я отключил промежуточное программное обеспечение и заменил его на @login_required декоратор, и у меня была та же проблема.

ВНОВЬ РЕДАКТИРОВАТЬ: Просто чтобы проверить, я вынул все проверки входа в систему, и все работало (как я ожидал). Так что я почти уверен, что self.client просто не знает, что я вошел в систему.

1 ответ

Решение

Не похоже, что вы создаете своего пользователя с паролем. Без предоставления пароля считается, что пользователь не может войти в систему. Предоставление пароля для create_user должен это исправить

self.client = Client()
self.user = User.objects.create_user('test_user', password='test_user')
self.client.login(username='test_user', password='test_user')
Другие вопросы по тегам