тестирование веб-приложения django, которое использует куки / сессию - PullRequest
3 голосов
/ 30 марта 2011

В views.py:

get_dict = Site.objects.getDictionary(request.COOKIES['siteid'])

{получает словарь с информацией о сайте на основе идентификатора из cookie}
В tests.py:

from django.test import TestCase
class WebAppTest(TestCase):
    def test_status(self):
        response = self.client.get('/main/',{})
        response.status_code # --->passed with code 200
        response = self.client.get('/webpage/',{'blog':1})
        response.status_code # ----> this is failing

Чтобы представить страницу блога, она переходит к представлению, где она получает словарь, используя существующий файл cookie, обрабатывает его, отображает шаблоны, что прекрасно работает при запуске приложения. Но тесты проваливаются. Не проверяя веб-приложения Django, я не уверен, как это проверить правильно. Вот обратная связь.
Traceback (последний вызов был последним):

File "<console>", line 2, in <module>
  File "/usr/lib/pymodules/python2.6/django/test/client.py", line 313, in post
    response = self.request(**r)
  File "/usr/lib/pymodules/python2.6/django/core/handlers/base.py", line 92, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/var/lib/django/data/../webpage/views.py", line 237, in getCostInfo
    get_dict = Site.objects.getDictionary(request.COOKIES['siteid'])
KeyError: 'siteid'

Изучил некоторые онлайн-примеры, но не смог найти что-то, что подробно касается куки / сессий. Любые идеи или ссылки на полезные ссылки высоко ценятся.

1 Ответ

6 голосов
/ 30 марта 2011

Взгляните на раздел Постоянное состояние документации Django Testing .

В вашем случае я бы ожидал, что ваш тест будет выглядеть примерно так:

from django.test import TestCase
from django.test.client import Client
class WebAppTest(TestCase):
    def setUp(self):
        self.client = Client()
        session = self.client.session
        session['siteid'] = 69 ## Or any valid siteid.
        session.save()
    def test_status(self):
        response = self.client.get('/main/',{})
        self.assertEqual(response.status_code, 200)   
        response = self.client.get('/webpage/',{'blog':1})
        self.assertEqual(response.status_code, 200)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...