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