Модульное тестирование аутентифицированного пользователя в 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().

Вернуться на верх