如何在pytest中使用Viewsets和serializer==7.0.1测试djangorestframework=



我正在使用Django项目模板。我正在我的应用程序的每个视图集中测试我的序列化程序权限。我想使用pytest中的parameterize来减少向每个序列化程序和视图集编写测试所需的行数。我有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

当这些更改时,上面的代码会起作用。

相关内容

  • 没有找到相关文章

最新更新