Написание TestCase для Django с проверкой подлинности API View - PullRequest
0 голосов
/ 16 июня 2019

Я успешно написал в TestCase, и он работает очень хорошо.

Сначала посмотрите на мой код:

Ниже мой tests.py

from django.shortcuts import reverse
from rest_framework.test import APITestCase
from ng.models import Contact


class TestNoteApi(APITestCase):
    def setUp(self):
        # create movie
        self.contact = Contact(userId=254, name="The Space Between Us", phone=2017, email='doe@f.com')
        self.contact.save()

    def test_movie_creation(self):
        response = self.client.post(reverse('getAndPost'), {
            'userId': 253,
            'name': 'Bee Movie',
            'phone': 2007,
            'email': 'ad@kjfd.com'
        })
        self.assertEqual(Contact.objects.count(), 2)

Приведенный выше фрагмент работает нормально, но проблема в том, что ... Как только я внедряю систему аутентификации, она не работает

ниже - мой settings.py

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    )
}

, если я перехожу на AllowAny в разрешении, Тест работает хорошо, но если оставить IsAuthenticated вместо AllowAny, он не будет работать.

Я хочу, чтобы тест выполнялся корректно, даже если у меня есть IsAuthenticated в разрешении.

Кто-нибудь может подсказать мне, как я могу это сделать?Я не получаю что изменить или что добавить в мой tests.py файл.

1 Ответ

0 голосов
/ 16 июня 2019

Вы должны создать user объект в методе setUp и использовать client.login() или force_authenticate() для выполнения аутентифицированного запроса:

class TestNoteApi(APITestCase):
    def setUp(self):
        # create user
        self.user = User.objects.create(username="test", password="test") 
        # create movie
        self.contact = Contact(userId=254, name="The Space Between Us", phone=2017, email='doe@f.com')
        self.contact.save()

    def test_movie_creation(self):
        # authenticate client before request 
        self.client.login(username='test', password='test')
        # or 
        self.clint.force_authenticate(user=self.user)
        response = self.client.post(reverse('getAndPost'), {
            'userId': 253,
            'name': 'Bee Movie',
            'phone': 2007,
            'email': 'ad@kjfd.com'
        })
        self.assertEqual(Contact.objects.count(), 2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...