Принудительный вход не работает с фикстурами (Django TestCase)
Я заполняю свою тестовую базу данных через фикстуру, и все загружается нормально. Однако я не могу заставить работать ни login
, ни force_login
. Пользователь также находится в приспособлении.
Когда я пытаюсь протестировать первый вид, он перенаправляет на страницу входа.
class TestUnauthUser(TestCase):
fixtures = ['project.json']
@classmethod
def setUpTestData(cls):
cls.client = Client()
# Get User and Login
cls.unauth_user = User.objects.get(username='unauth_user')
print(cls.unauth_user.pk)
#cls.login = cls.client.login(username=cls.unauth_user.username, password=cls.unauth_user.password)
cls.client.force_login(cls.unauth_user)
# Get Project
cls.project = Project.objects.get(slug='test-project')
cls.slug_dict = {'slug': cls.project.slug}
# Get Task
cls.task = Task.objects.get(slug='test-task')
def test_login(self):
self.assertTrue(self.unauth_user.login)
def test_project_view(self):
# Project Main
response = self.client.get(reverse('customerportal:project', kwargs=self.slug_dict))
self.assertEqual(response.status_code, 403)
Я могу проверить, что у меня есть правильный объект пользователя с помощью: print(cls.unauth_user.pk)
. Таким образом, пользователь существует и получается. Но он все еще не может успешно войти в систему.
Я нашел проблему. force_login()
необходимо запускать перед каждым тестом. Следующее действие решает проблему:
def setUp(self):
self.client.force_login(self.unauth_user)
Однако это противоречит цели setUpTestData
. Насколько я понимаю, все, что установлено в setUpTestData
, должно действовать в течение всего занятия. Поэтому я не понимаю, почему force_login
должно выполняться многократно, даже если оно задано оттуда. Если кто-то может предоставить дальнейший контекст, я буду очень признателен.