Тестирование Django Просмотр функций - PullRequest
1 голос
/ 06 января 2020

В настоящее время я пытаюсь создать юнит-тесты для функций, которые я написал внутри views.py. Однако я не смог найти правильный способ сделать это. Вот что у меня есть, например:

views.py:

class SalesListView(LoginRequiredMixin, TemplateView):
    def get_month(self):
        if self.request.GET.get('month'):
            d = datetime.strptime(self.request.GET.get('month'), '%Y-%m')
        else:
            d = datetime.today()
        return d

, и я пытаюсь проверить это так:

tests.py:

class ViewFunctionsTests(TestCase):
    def test_saleslistview(self):
        self.request = Mock(session={'month': '2019-11'}, method='GET')
        view = SalesListView()
        self.assertEqual(view.get_month(), '2019-11')

Однако при этом возвращается ошибка AttributeError: AttributeError: 'SalesListView' object has no attribute 'request'

У кого-нибудь есть какие-либо предложения относительно правильного способа проверки функций представления, таких как приведенная выше? Спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 06 января 2020

От Django до c:

from django.test import Client
c = Client()
response = c.post('/login/', {'username': 'john', 'password': 'smith'})
response.status_code
200
response = c.get('/customer/details/')
response.content

для более подробной информации: https://docs.djangoproject.com/en/3.0/topics/testing/tools/

0 голосов
/ 08 января 2020

Я нашел решение, которое искал, используя библиотеку RequestFactory.

class ViewFunctionsTests(TestCase):
    def test_saleslistview(self):
        request = RequestFactory().get('/sales/sales_dashboard/?month=2019-11')
        view = SalesListView()
        view.setup(request)
        self.assertEqual(view.get_month(), datetime.datetime(2019, 11, 1, 0, 0))

Для запроса требуется путь к вашему шаблону. Надеюсь, это поможет, если вы столкнетесь с той же проблемой, что и я.

...