2010-11-23 1 views
4

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

ответ

2

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

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

+0

session.save() не требуется и недействителен. – 2010-11-23 04:28:01

0

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

Смежные вопросы