首页 > 解决方案 > 如何从 ViewSet 类创建 Django REST Framework View 实例?

问题描述

我正在尝试对Django REST Framework 视图集权限进行单元测试,原因有两个:速度和简单性。为了与这些目标保持一致,我还想避免使用任何模拟框架。基本上我想做这样的事情:

request = APIRequestFactory().post(…)
view = MyViewSet.as_view(actions={"post": "create"})
self.assertTrue(MyPermission().has_permission(request, view))

这种方法的问题在于它view实际上不是一个View实例,而是一个对实例执行某些操作的函数View,并且它没有我在 中使用的某些属性has_permission,例如action. 如何构造View可以传递给的实例类型has_permission

权限已经在集成和接受级别进行了测试,但我想避免创建几个复杂且耗时的测试来简单地检查每个相关操作是否受到保护。


我已经能够通过猴子修补视图集实例并手动调度它来解决这个问题:

view_set = MyViewSet()
view_set.action_map = {"post": "create"}
view_set.dispatch(request)

标签: pythondjangopython-3.xdjango-rest-framework

解决方案


您可以执行以下操作。

request = APIRequestFactory().post(…)
view_obj = MyViewSet()
self.assertTrue(MyPermission().has_permission(request, view_obj))

推荐阅读