Не могу получить тест, чтобы пройти, когда функционал работает правильно: django TestCase - PullRequest
0 голосов
/ 10 июля 2019

У меня есть проект Django Rest Framework.функциональность работает должным образом, когда я делаю это через Django View Framework.

Я написал тест для почтового запроса, который работает правильно.Когда я запускаю следующие тесты, я получаю ошибку, хотя она не должна давать ошибку и фактически проходить.Я новичок в написании тестов для django rest framework, поэтому я не совсем уверен, почему я получаю следующую ошибку:

Creating test database for alias 'default'...
C:\Users\jandali\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\fields\__init__.py:1421: RuntimeWarning: DateTimeField User.date_joined received a naive datetime (2019-05-30 14:17:09.953000) while time zone support is active.
  RuntimeWarning)
....F........................................................
======================================================================
FAIL: test_UserCreatePreference (owf_framework.tests.api.v2.test_url_preferences.Preferencetest_AsUser)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\jandali\Desktop\ozone-backend\ozone-framework-python-server\owf_framework\tests\api\v2\test_url_preferences.py", line 154, in test_UserCreatePreference
    self.assertEqual(response_post_extra.status_code, 403)
AssertionError: 201 != 403

----------------------------------------------------------------------
Ran 61 tests in 11.833s

FAILED (failures=1)
Destroying test database for alias 'default'...
System check identified no issues (0 silenced).
{'version': 1, 'namespace': 'namespace2', 'path': 'path1', 'value': 'random value 1', 'user_id': 1, 'person': 1}
{'version': 1, 'namespace': 'namespace2', 'path': 'path2', 'value': 'random value 2', 'user_id': 1, 'person': 1}
{'version': 1, 'namespace': 'namespace2', 'path': 'path2', 'value': 'random value 2', 'user_id': 1, 'person': 1, 'display_name': 'namespace-path'}

LINE 133 - следующая строка из теста:

self.assertEqual(response_post_1.status_code, 201)

Это тест, который я написал .:

class Preferencetest_AsUser(TestCase):
    fixtures = ['default_users.json', 'default_objects.json']
    test_post_1 = {
        "version": 1,
        "namespace":'namespace2',
        "path":'path1',
        "value":'random value 1',
        "user_id":1,
        "person":1
    }
    test_post_2 = {
        "version": 1,
        "namespace":'namespace2',
        "path":'path2',
        "value":'random value 2',
        "user_id":1,
        "person":1
    }
    test_post_extra = {
        "version": 1,
        "namespace":'namespace2',
        "path":'path2',
        "value":'random value 2',
        "user_id":1,
        "person":1, 
        "display_name":'namespace-path'
    }
    test_post_missing = {
        "version": 1,
        "namespace":'namespace2',
        "path":'path2',
        "value":'random value 2',
    }
    test_post_mismatch = {
        "version": 1,
        "namespace":'namespace2',
        "path":'path2',
        "value":1,
        "user_id":'random value 2',
        "person":1
    }
    test_put_1 = {
        "version": 2,
        "namespace":'namespace2',
        "path":'path3',
        "value":'random value 3',
        "user_id":1,
        "person":1
    }
    test_put_2 = {
        "version": 2,
        "namespace":'namespace2',
        "path":'path4',
        "value":'random value 4',
        "user_id":1,
        "person":1
    }
    test_put_extra = {
        "version": 1,
        "namespace":'namespace2',
        "path":'path3',
        "value":'random value 3',
        "user_id":1,
        "person":1, 
        "display_name":'namespace-path'
    }
    test_put_missing = {
        "version": 1,
        "namespace":'namespace2',
        "path":'path3',
        "value":'random value 3',
    }
    test_put_mismatch = {
        "version": 1,
        "namespace":'namespace2',
        "path":'path3',
        "value":1,
        "user_id":'random value 3',
        "person":1
    }

    def test_UserCreatePreference(self):

            client.logout()
            client.login(username='test', password='password')
            response_post_1 = client.post('/api/v2/preferences/', self.test_post_1, format='json')
            self.assertEqual(response_post_1.status_code, 201)
            response_parsed_post_1 = response_post_1.json()

            self.assertEqual(response_parsed_post_1['version'], self.test_post_1['version'])
            self.assertEqual(response_parsed_post_1['namespace'], self.test_post_1['namespace'])
            self.assertEqual(response_parsed_post_1['path'], self.test_post_1['path'])
            self.assertEqual(response_parsed_post_1['value'], self.test_post_1['value'])
            self.assertEqual(response_parsed_post_1['user_id'], self.test_post_1['user_id'])
            self.assertEqual(response_parsed_post_1['person'], self.test_post_1['person'])

            response_post_2 = client.post('/api/v2/preferences/', self.test_post_2, format='json')
            self.assertEqual(response_post_2.status_code, 201)
            response_parsed_post_2 = response_post_2.json()
            self.assertEqual(response_parsed_post_2['version'], self.test_post_2['version'])
            self.assertEqual(response_parsed_post_2['namespace'], self.test_post_2['namespace'])
            self.assertEqual(response_parsed_post_2['path'], self.test_post_2['path'])
            self.assertEqual(response_parsed_post_2['value'], self.test_post_2['value'])
            self.assertEqual(response_parsed_post_2['user_id'], self.test_post_2['user_id'])
            self.assertEqual(response_parsed_post_2['person'], self.test_post_2['person'])

            response_post_extra = client.post('/api/v2/preferences/', self.test_post_extra, format='json')
            self.assertEqual(response_post_extra.status_code, 403)

            response_post_missing = client.post('/api/v2/preferences/', self.test_post_missing, format='json')
            self.assertEqual(response_post_missing.status_code, 403)

            response_post_mismatch = client.post('/api/v2/preferences/', self.test_post_mismatch, format='json')
            self.assertEqual(response_post_mismatch.status_code, 403)

            client.logout()

Вот мой набор параметров, который работает правильно:

    @permission_classes((IsAuthenticated))
    def create(self, request, *args, **kwargs):
        namespace = self.kwargs.get('namespace', None)
        path = self.kwargs.get('path', None)
        print(request.data)
        if namespace is None and path is None:
            return super().create(request, *args, **kwargs)
        if namespace and path is None:
            data = {
                "person":request.user.id,
                'version':request.data.get('version'),
                'namespace':namespace,
                'path':request.data.get('path'),
                'value':request.data.get('value'),
                'user_id':request.user.id,
            }

        if namespace and path:
            data = {
                "person":request.user.id,
                'version':request.data.get('version'),
                'namespace':namespace,
                'path':path,
                'value':request.data.get('value'),
                'user_id':request.user.id,
            }
        serializer = self.get_serializer(data=data)
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        headers = self.get_success_headers(serializer.data)
        return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...