Модульное тестирование аутентифицированного пользователя в Django
Я пытаюсь протестировать доступ в качестве зарегистрированного пользователя. У меня возникают проблемы с приведенным ниже модульным тестом, который не работает со мной.
class ExampleTest(TestCase):
def setUp(self):
self.client = Client()
self.example_user = get_user_model().objects.create_user(
username='exampleuser',
email='user@example.com'
)
self.example_user.set_password('testing12345')
self.example_user.save()
def test_taking_too_much_time(self):
my_client = self.client
#my_client = Client()
my_client.login(username='exampleuser', password='testing12345')
#my_client.force_login(self.example_user)
response = my_client.get('/example/link/')
self.assertEqual(response.status_code, 200)
Я перепробовал все, но, несмотря на различные решения, я получаю сообщение.
AttributeError: 'HttpRequest' object has no attribute 'user'
В проекте у меня есть сигнал, который устраняет "ошибку", если я ее комментирую.
@receiver(user_logged_in, sender=User)
def log_in(request, sender, **kwargs)
Жду отзывов.
Я не знаком с Client()
, скорее мы используем RequestFactory
и передаем полученный объект request
непосредственно представлениям.
def test_taking_too_much_time(self):
factory = RequestFactory()
request= factory.get('/example/link/',)
request.user = self.user
response = ExampleLinkView.as_view()(request)
self.assertEqual(response.status_code, 200)
Вход в систему осуществляется в обход, поскольку не будет применяться никаких промежуточных программ. Подробнее об этом вы можете прочитать здесь Расширенное тестирование.
Я потратил на него больше времени и проверил весь сигнальный код, связанные функции, зависимости, настройки проекта. Всего этого очень много. Виновником является Client()
, который обслуживает бэкенд, но имеет проблемы с HttpRequest
.
@receiver (user_logged_in, sender = Person)
def when_logging_in (request, sender, user, ** kwargs):
messages.info (request, f '{user.username} hello.')
Нормально использовать instance
вместо request
, но не для messages
, где одним из аргументов является request
. Итак, где можно разместить message
для пользователя, чтобы не потерять функциональность, но выполнить модульные тесты с использованием Client()
.