Как высмеять фреймворк Django REST RawQuery? ⇐ Python
Как высмеять фреймворк Django REST RawQuery?
Я разрабатываю API BBS с использованием платформы Django REST. Я пытался имитировать RawQuery, потому что тестовая база данных Django не работает, но и мой макетный код тоже не работает.
models.py
из моделей импорта django.db # Здесь преобразуется Snake_case в CamelCase, поскольку клиенты используют CamelCase. Класс Board(models.Model): boardID: models.IntegerField = models.IntegerField(primary_key=True) имя: models.CharField = models.CharField(max_length=32) путь: models.CharField = models.CharField(max_length=64) @staticmethod защита get(язык): д = ''' ВЫБЕРИТЕ board_id КАК boardID, имя, путь ИЗ bbs.boards ГДЕ язык = %s ЗАКАЗАТЬ ПО order_in_lang ''' return Board.objects.raw(q, [lang]) serializers.py
из bbs_api.bbs_api модели импорта из сериализаторов импорта rest_framework класс BoardSerializer(serializers.HyperlinkedModelSerializer): класс Мета: модель = модели.Доска поля = '__all__' views.py
из bbs_api.bbs_api модели импорта, сериализаторы из rest_framework импортировать наборы представлений из rest_framework.response Ответ на импорт класс EnBoardsViewSet(viewsets.ModelViewSet): def get(сам, запрос): raw_query_set = models.Board.get('en') boards_serializer = сериализаторы.BoardSerializer(raw_query_set, многие = True) вернуть ответ (boards_serializer.data) tests.py
из django.db.models.query import RawQuerySet из django.http импортировать HttpRequest из django.test импортировать TestCase из bbs_api.bbs_api модели импорта, сериализаторы, представления из rest_framework.request Запрос на импорт из rest_framework.serializers импортируйте BaseSerializer, ListSerializer из rest_framework.utils.serializer_helpers импортировать ReturnList из патча импорта unittest.mock, PropertyMock импортировать обратную трассировку класс EnBoardsViewSetTest(TestCase): @patch('rest_framework.serializers.BaseSerializer.data') def test_get_returns_en_boards(self, fake_data): ожидается = [ {'lang': 'en', 'name': 'News', 'path': '/boards/en/news', «минуты_to_live»: 1440, «order_in_lang»: 1}, {'lang': 'en', 'name': 'Политика', 'path': '/boards/en/politics', «минуты_to_live»: 1440, «order_in_lang»: 2}, ] издевательские_данные = PropertyMock (return_value = ожидаемое) req = Запрос (HttpRequest()) view_set = представления.EnBoardsViewSet() рез = view_set.get(req) результат = рез.данные self.assertEqual(результат, ожидаемый) Я пытался высмеять rest_framework.serializers.BaseSerializer.data, потому что похоже, что это свойство наконец выполняет необработанный запрос. Я запускаю ./mange.py test и получаю
Найдено 1 тест(ов). Создание тестовой базы данных для псевдонима «по умолчанию»… Проверка системы не выявила проблем (0 отключено). Ф =============================================== ==================== ОШИБКА: test_get_returns_en_boards (bbs_api.bbs_api.tests.EnBoardsViewSetTest) -------------------------------------------------- -------------------- Traceback (последний вызов последний): Файл "/usr/lib/python3.10/unittest/mock.py", строка 1379, исправлен return func(*newargs, **newkeywargs) Файл «/home/admin01/project/bbs/bbs_api/bbs_api/bbs_api/tests.py», строка 31, в test_get_returns_en_boards self.assertEqual(результат, ожидаемый) AssertionError: [] != [{'lang': 'en', 'name': 'News', 'path': '/[169 символов]: 2}] -------------------------------------------------- -------------------- Выполнил 1 тест за 0,001 с. НЕУДАЧА (ошибка=1) Уничтожение тестовой базы данных для псевдонима «по умолчанию»… Окружающая среда [*]Ubuntu 22.04.2 LTS [*]Питон 3.10.12 [*]Джанго 4.2.1 [*]djangorestframework 3.14.0
Я разрабатываю API BBS с использованием платформы Django REST. Я пытался имитировать RawQuery, потому что тестовая база данных Django не работает, но и мой макетный код тоже не работает.
models.py
из моделей импорта django.db # Здесь преобразуется Snake_case в CamelCase, поскольку клиенты используют CamelCase. Класс Board(models.Model): boardID: models.IntegerField = models.IntegerField(primary_key=True) имя: models.CharField = models.CharField(max_length=32) путь: models.CharField = models.CharField(max_length=64) @staticmethod защита get(язык): д = ''' ВЫБЕРИТЕ board_id КАК boardID, имя, путь ИЗ bbs.boards ГДЕ язык = %s ЗАКАЗАТЬ ПО order_in_lang ''' return Board.objects.raw(q, [lang]) serializers.py
из bbs_api.bbs_api модели импорта из сериализаторов импорта rest_framework класс BoardSerializer(serializers.HyperlinkedModelSerializer): класс Мета: модель = модели.Доска поля = '__all__' views.py
из bbs_api.bbs_api модели импорта, сериализаторы из rest_framework импортировать наборы представлений из rest_framework.response Ответ на импорт класс EnBoardsViewSet(viewsets.ModelViewSet): def get(сам, запрос): raw_query_set = models.Board.get('en') boards_serializer = сериализаторы.BoardSerializer(raw_query_set, многие = True) вернуть ответ (boards_serializer.data) tests.py
из django.db.models.query import RawQuerySet из django.http импортировать HttpRequest из django.test импортировать TestCase из bbs_api.bbs_api модели импорта, сериализаторы, представления из rest_framework.request Запрос на импорт из rest_framework.serializers импортируйте BaseSerializer, ListSerializer из rest_framework.utils.serializer_helpers импортировать ReturnList из патча импорта unittest.mock, PropertyMock импортировать обратную трассировку класс EnBoardsViewSetTest(TestCase): @patch('rest_framework.serializers.BaseSerializer.data') def test_get_returns_en_boards(self, fake_data): ожидается = [ {'lang': 'en', 'name': 'News', 'path': '/boards/en/news', «минуты_to_live»: 1440, «order_in_lang»: 1}, {'lang': 'en', 'name': 'Политика', 'path': '/boards/en/politics', «минуты_to_live»: 1440, «order_in_lang»: 2}, ] издевательские_данные = PropertyMock (return_value = ожидаемое) req = Запрос (HttpRequest()) view_set = представления.EnBoardsViewSet() рез = view_set.get(req) результат = рез.данные self.assertEqual(результат, ожидаемый) Я пытался высмеять rest_framework.serializers.BaseSerializer.data, потому что похоже, что это свойство наконец выполняет необработанный запрос. Я запускаю ./mange.py test и получаю
Найдено 1 тест(ов). Создание тестовой базы данных для псевдонима «по умолчанию»… Проверка системы не выявила проблем (0 отключено). Ф =============================================== ==================== ОШИБКА: test_get_returns_en_boards (bbs_api.bbs_api.tests.EnBoardsViewSetTest) -------------------------------------------------- -------------------- Traceback (последний вызов последний): Файл "/usr/lib/python3.10/unittest/mock.py", строка 1379, исправлен return func(*newargs, **newkeywargs) Файл «/home/admin01/project/bbs/bbs_api/bbs_api/bbs_api/tests.py», строка 31, в test_get_returns_en_boards self.assertEqual(результат, ожидаемый) AssertionError: [] != [{'lang': 'en', 'name': 'News', 'path': '/[169 символов]: 2}] -------------------------------------------------- -------------------- Выполнил 1 тест за 0,001 с. НЕУДАЧА (ошибка=1) Уничтожение тестовой базы данных для псевдонима «по умолчанию»… Окружающая среда [*]Ubuntu 22.04.2 LTS [*]Питон 3.10.12 [*]Джанго 4.2.1 [*]djangorestframework 3.14.0
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как получить затронутые строки в базе данных помещений с помощью @RawQuery
Anonymous » » в форуме Android - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как получить затронутые строки в базе данных помещений с помощью @RawQuery
Anonymous » » в форуме Android - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-