Django UnitTest - установка переменной сеанса

У меня есть класс модульного теста Django, основанный на django_webtest.WebTest, и я не могу найти правильный способ установки переменной сеанса во время теста. Я пробовал следующее, но я не работаю

from django_webtest import WebTest
class TestMyTests(WebTest):
    def test_my_tesst(self):
       ... 
       self.app.session['var1'] = 'val1'
       ...

2 ответа

Это, как правило, для чего нужен Клиент. Он имеет доступ к данным сеанса. Я не могу говорить за django_webtest, поскольку это внешняя библиотека для django, но внутри для юнит-тестирования, вы можете получить доступ и установить данные сеанса следующим образом:

import unittest
from django.test import Client

class TestMyTests(unittest.TestCase):

    def setUp(self):
        self.client = Client()

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

Приведенный выше пример был взят из документации Django по инструментам тестирования.

Если вы используете pytest Вы можете сделать следующее:

import pytest

from django.test import Client

@pytest.mark.django_db # this is used if you are using the database
def test_my_tesst():
    # code before setting session
    c = Client()
    session = c.session
    session['var1'] = 'val1'
    session.save()
    # code after setting session

Наиболее важным является сохранение сеанса после его изменения. В противном случае это не имеет никакого эффекта.

Другие вопросы по тегам