Django Unittesting добавляет переменную в сессию - PullRequest
2 голосов
/ 07 июля 2011

В моем unittest мне нужно добавить переменную в сеанс, потому что эта переменная используется в проверяемом представлении.В документации django говорится, что это возможно следующим образом (https://docs.djangoproject.com/en/1.3/topics/testing/#django.test.client.Client.session):

def test_something(self):
    session = self.client.session
    session['somekey'] = 'test'
    session.save()

Этот пример кода на самом деле не работает, потому что вы получите ошибку, что у dict нет функции save.Я также пробовал различные другие способы изменить содержимое внутри dict сеанса, но пока не нашел способа изменить его. Я знаю, что это значит, что я получаю обратно, является объектом dict, поэтому у него нет функции сохранения.dict сеанса также не обновляется при добавлении ключей.

Статуты документации при использовании self.client.session должны возвращать объект SessionStore вместо словаря.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2013

Билет, на который ссылается @Sam Stoelinga, закрыт как дубликат. Соответствующий билет можно найти здесь .

Для сохранения данных сеанса вам нужно будет использовать аутентифицированного пользователя. Я нашел решение здесь .

class BlogAdminTestCase(TestCase):
    def setUp(self):
        # Setup Test User
        User.objects.create_user(
            username='foo',
            password='bar'
        )

        # Must login to modify session variables
        self.client.login(username='foo', password='bar')

        s = self.client.session
        s['my_session_variable'] = 'Yay!'
        s.save()
0 голосов
/ 07 июля 2011

Кажется, сейчас в Django есть ошибка, поэтому неаутентифицированные пользователи не могут изменить сессию. Это соответствующий билет: https://code.djangoproject.com/ticket/11475.

Обходной путь - создать фиктивное представление, в котором установлены переменные сеанса, и вызвать его с помощью Client.get ('url_of_dummy_view').

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