Django unitTest response.content не показывает правильную информацию о пользователе - PullRequest
2 голосов
/ 24 сентября 2019

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

class WorkflowViewTest(TestCase):

    def test_response_authorized(self):
        User = get_user_model()
        user = User.objects.get(username='JohnDoe')

        self.client.force_login(user)
        response = self.client.get('/workflow/')

        print(response.content.decode()) # response content is not right

        self.assertEqual(response.status_code, 200) # assertions are passing just fine
        self.assertTemplateUsed(response, 'workflow.html')

Упрощенное содержимое используемого шаблона 'workflow.html':

{% extends "base_generic.html" %}
{% load static %}

{% block content %}

{% if user %}
{{user}}
{{user.username}}
{{user.first_name}}
{{user.last_name}}
{{user.email}}

{% else %}

User variable not provided

{% endif %}
{% endblock %}

Где кодируется response.context.content:

<body>

AnonymousUser





</body>
</html>

Я пытался создать пользователя в рамках теста, я также создал пользователя вручную, я пробовал и self.client.force_login(), и self.client.login().Ни одно из предложенных мной решений не сработало.

Я действительно ценю любые идеи.Спасибо

1 Ответ

1 голос
/ 24 сентября 2019

Я не понял, что я изменил в settings.py по умолчанию AUTHENTICATION_BACKENDS на бэкэнд своей компании.Для тестирования поведения приложения без реального входа пользователя в систему, мне пришлось дополнительно к вышеуказанным изменениям также @modify_settings или создать test_setting как показано ниже:

@modify_settings(AUTHENTICATION_BACKENDS={'remove': 'django.contrib.auth.backends.RemoteUserBackend',
                                          'append': 'django.contrib.auth.backends.ModelBackend'})
class WorkflowViewTest(TestCase):

    def setUp(self):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...