Я создал небольшой проект django с тремя приложениями, и теперь я пишу тесты для одного из них. Мне нужно было передать некоторую информацию между разными видами и разными шаблонами, но эта информация не должна быть видимой пользователю. Моя первая попытка состояла в том, чтобы передать эту информацию как скрытые поля в HTML-форме, но затем мне было указано, что это не делает ее полностью невидимой. Таким образом, я сохранил эту информацию в словаре request.session, и все прошло хорошо.с использованием объектов сеанса в django во время тестирования?
Тем не менее, моя проблема возникла во время тестирования. Согласно документации django (http://docs.djangoproject.com/en/1.2/topics/testing/), когда вам нужно изменить словарь сеанса во время тестирования, вы должны сначала сохранить его в переменной, изменить его, а затем сохранить переменная.
Так что мой код тестирования что-то вроде этого:
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)
Но когда я запускаю тест питон manage.py, я получаю AttributeError, говоря, что Dict, не имеет атрибута Save(). Я читал где-то еще (http://code.djangoproject.com/ticket/11475), что я должен попробовать сделать self.client.get на любой другой URL-адрес, прежде чем манипулировать сеансом, чтобы он стал «настоящим» сеансом, но я продолжал получать тот же атрибут AttributeError.
session.save() не требуется и недействителен. – 2010-11-23 04:28:01