использовать сессионные объекты в Django во время тестирования? - PullRequest
4 голосов
/ 23 ноября 2010

Я создал небольшой проект django с тремя приложениями, и сейчас я пишу тесты для одного из них.Мне нужно было передать некоторую информацию между различными представлениями и различными шаблонами, но эта информация не должна быть видна пользователю.Моя первая попытка состояла в том, чтобы передать эту информацию в виде скрытых полей в форме HTML, но затем мне было указано, что это не делает ее полностью невидимой.Итак, я сохранил эту информацию в словаре request.session, и все прошло нормально.

Тем не менее, моя проблема возникла во время тестирования.В соответствии с документацией django (http://docs.djangoproject.com/en/1.2/topics/testing/), когда вам нужно изменить словарь сеанса во время тестирования, вы должны сначала сохранить его в переменной, изменить его, а затем сохранить переменную.

Так что мой код тестирования похож наthis:

class Test_Atacar(TestCase):
    fixtures = ["testBase.json"]

    def test_attack_without_troops(self):
        red_player = Player.objects.get(color=RED)
        self.failUnless(red_player != None)
        session = self.client.session
        session["player_id"] = red_player.id
        session.save()
        response = self.client.get("/espectador/sadfxc/", follow=True)

Но когда я запускаю тест python manage.py, я получаю AttributeError, говоря, что dict не имеет атрибута save (). Я читаю где-то еще (http://code.djangoproject.com/ticket/11475), что я должен попробоватьсоздание self.client.get для любого другого URL ПЕРЕД манипулированием сеансом, чтобы он стал «настоящим» сеансом, но я продолжал получать тот же AttributeError.

Ответы [ 2 ]

2 голосов
/ 23 ноября 2010

когда вам нужно изменить словарь сеанса во время тестирования, вы должны сначала сохранить его в переменной, изменить и затем сохранить переменную

Эта строка означает, что если вы хотитевнесите некоторые изменения в некоторые переменные сеанса, не вносите их непосредственно в сеанс.Сохраните данные в переменной, внесите изменения в эту переменную и затем поместите эту переменную в сессионный словарь.Сессия, как и любой другой словарь.

0 голосов
/ 23 ноября 2010

@ и я знаю, что это странно, но это незаметно для работы.Чтобы заставить его работать, я должен был сделать, кроме непосредственного манипулирования переменной, сделать self.client.get ("/ dummy /"), где dummy - это URL, который использует фиктивное представлениеЭто представление только изменяет атрибут запроса, который он получает в качестве аргумента.Честно говоря, я не знаю, что происходит за кулисами, которые делают эту работу

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