Как использовать наборы представлений и сериализаторы в pytest==7.0.1 Параметризация в тестировании djangorestframework==3.13.1 get_serializer() и get_permission()?
Я использую шаблон проекта Django из здесь. Я тестирую свои сериализаторы и разрешения в каждом viewset, который есть в моем приложении. Я хочу использовать параметризацию из pytest, чтобы сократить количество строк, необходимых для написания тестов для каждого сериализатора и набора представлений. У меня есть 10 сериализаторов и наборов представлений, которые мне нужно протестировать и которые имеют шаблон, как показано ниже
test_drf_viewsets.py
@pytest.mark.parametrize(
("app_url", "app_viewset", "serializer"),
[
(
"api:mv-signup-list",
viewset.UserSignUpMaterializedViewSet,
serializers.UserSignUpMaterializedViewSerializer,
),
(
"api:mv-total-list",
viewset.TotalMaterializedViewSet,
serializers.TotalMaterializedViewSerializer,
),
],
)
def test_get_serializer(
self,
admin_user: User,
app_url: str,
app_viewset,
serializer,
rf: RequestFactory,
):
viewsets = app_viewset
request = rf.get(reverse(app_url))
request.user = admin_user
viewsets.request = Request(request)
viewsets.format_kwarg = None
assert isinstance(viewsets.get_serializer(), serializer)
Однако, когда я запускаю приведенный выше код, он показывает эту ошибку
TypeError: GenericAPIView.get_serializer() missing 1 required positional argument: 'self'
- Представленный выше код опущен для краткости.
Я нашел минимальное решение, которое работает для моего случая использования.
Вместо этого используйте следующие:
assert isinstance(viewsets.get_serializer(), serializer)
Измените его на следующее:
assert viewsets.serializer_class == serializer
То же самое с get_permission:
assert viewsets.permission_classes[0] == IsAuthenticated
Код выше работает, когда они изменены.