Я создал небольшой проект 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.