Как я могу проверить функцию с request.is_ ajax () и request.method == 'POST' в Django, используя unittest? - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть следующая функция

    def edit_resolution_text_view(self, request):
        if request.method == 'POST' and request.is_ajax():
            resolution = request.POST.get('resolution')
            donation_id = request.POST.get('donation')
            result = Donation.objects.filter(pk=donation_id).\
                update(resolution_note=resolution)
            if not result:
                return JsonResponse({'message': 'Error'})
            return JsonResponse({'resolution': resolution})
        return JsonResponse({'message': 'Error'})

Как проверить это, используя unittest

Эта функция находится в Django modelAdmin.

Я определяю экземпляр как self.donation_admin = DonationAdmin(model=Donation, admin_site=AdminSite()) и вызывать функцию как self.donation_admin.edit_resolution_text_view(...)

1 Ответ

1 голос
/ 10 февраля 2020

Самый простой способ - использовать Client от unittest и вызвать точку назначения, которая разрешает вам функцию. Метод is_ajax() просто проверяет наличие в запросе заголовка HTTP_X_REQUESTED_WITH ':' XMLHttpRequest '. Таким образом, вы можете добавить его в тестовый запрос.

class TestEditResulutionTextView(unittest.TestCase):

    def test_get(self):
        response = self.client.get('/url_to_my_view/', **{'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'})
        self.assertEqual(response.json(), {'message': 'Error'})

    def test_post(self):
        expected_resolution = # put here what you are expecting
        response = self.client.post('/url_to_my_view/', **{'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'})
        self.assertEqual(response.json(), {'resolution': expected_resolution})

...