Как получить пользователя в тесте Djano? - PullRequest
2 голосов
/ 28 марта 2012

У меня есть некоторые внешние услуги.Мое приложение Django построено поверх моих API внешних сервисов.Чтобы поговорить с моей внешней службой, я должен передать аутентичные куки, которые я могу получить, прочитав User (этот куки! = Куки django).

Используя инструменты тестирования, такие как webtests,requests, у меня проблемы с написанием моих тестов.

class MyTestCase(WebTest):
    def test_my_view(self):
        #client = Client()
        #response = client.get(reverse('create')).form
        form = self.app.get(reverse('create'), user='dummy').form
        print form.fields.values()
        form['name'] = 'omghell0'
        print form

        response = form.submit()

Мне нужно отправить форму, которая, скажем, создает пользователя на моем внешнем сервисе.Но для этого я обычно передаю request.user (чтобы подтвердить свою привилегию на внешнюю службу).Но у меня нет request.user.

Какие варианты у меня есть для такого рода вещей?

Спасибо ...


Предположим, это мои tests.py

import unittest
from django.test.client import Client
from django.core.urlresolvers import reverse
from django_webtest import WebTest
from django.contrib.auth.models import User


class SimpleTest(unittest.TestCase):
    def setUp(self):
        self.usr = User.objects.get(username='dummy')
        print self.usr
    .......

Я получаю

Traceback (most recent call last):
  File "/var/lib/graphyte-webclient/webclient/apps/codebundles/tests.py", line 10, in setUp
    self.usr = User.objects.get(username='dummy')
  File "/var/lib/graphyte-webclient/graphyte-webenv/lib/python2.6/site-packages/django/db/models/manager.py", line 132, in get
    return self.get_query_set().get(*args, **kwargs)
  File "/var/lib/graphyte-webclient/graphyte-webenv/lib/python2.6/site-packages/django/db/models/query.py", line 341, in get
    % self.model._meta.object_name)
DoesNotExist: User matching query does not exist

Но если я проверю User.objects в представлениях, я в порядке.

Ответы [ 3 ]

4 голосов
/ 28 марта 2012

Вам необходимо использовать метод setUp () для создания тестовых пользователей для тестирования - тестирование никогда не использует оперативные данные, но создает временную тестовую базу данных для запуска ваших модульных тестов.Прочитайте это для получения дополнительной информации: https://docs.djangoproject.com/en/dev/topics/testing/?from=olddocs#writing-unit-tests

РЕДАКТИРОВАТЬ:

Вот пример:

from django.utils import unittest
from django.contrib.auth.models import User

from myapp.models import ThisModel, ThatModel

class ModelTest(unittest.TestCase):
    def setUp(self):
        # Create some users
        self.user_1 = User.objects.create_user('Chevy Chase', 'chevy@chase.com', 'chevyspassword')
        self.user_2 = User.objects.create_user('Jim Carrey', 'jim@carrey.com', 'jimspassword')
        self.user_3 = User.objects.create_user('Dennis Leary', 'dennis@leary.com', 'denisspassword')

Также обратите внимание, что, если вы собираетесь использовать более одного методаЧтобы протестировать различные функциональные возможности, вы должны использовать метод tearDown для уничтожения объектов перед повторным созданием их для следующего теста.Это то, что мне потребовалось некоторое время, чтобы наконец понять, поэтому я избавлю вас от хлопот.

def tearDown(self):
        # Clean up after each test
        self.user_1.delete()
        self.user_2.delete()
        self.user_3.delete()
1 голос
/ 28 марта 2012

https://docs.djangoproject.com/en/1.4/topics/testing/#module-django.test.client

Используйте тестовый клиент django для имитации запросов. Если вам нужно проверить поведение возвращаемого результата, используйте Selenium.

1 голос
/ 28 марта 2012

Django рекомендует использовать либо юнит-тесты, либо док-тесты, как описано здесь .Вы можете поместить эти тесты в tests.py в каждом каталоге приложений, и они будут запускаться при использовании команды `python manage.py test".

Django предоставляет очень полезные классы и функции для модульного тестирования, как описано здесь . В частности, класс django.test.Client очень удобен и позволяет вам управлять такими вещами, как пользователи.

...